問題描述:將乙個字串例如abcd123向左旋轉移位4位變為123abcd;或者右移4位變為d1234abc;要求寫乙個函式實現對該字串的這兩種操作。
方法一:最容易想到的方法當然是(以左移為例)一次移動一位,一共移動四次,這樣便可以將上述字串左移4位。
abcd123-->bcd123a-->cd123ab-->d123abc-->123abcd
leftshift(int* arr, int n, int k) //arr為字串,n為字串的長度,k為左移的長度 }
方法二:
abcd123左移4位:
分成兩部分:abcd 123
左部翻** dcba 123
右部翻** dcba 321
整體翻** 123 abcd
abcd123右移4位:
分成兩部分: abc d123
左部翻** cba d123
右部翻** cba 321d
整體翻** d123 abc
演算法描述:
由上可知,當乙個有m個字元的字串要左移n位時,要將其分成左右兩部分,分別有n和m-n個字元;
當乙個有m個字元的字串要右移n位時,要將其分成左右兩部分,分別有m-n和n個字元;
然後對上面分割之後的兩部分分別翻轉形成新的字串,最後再將得到的新字串翻轉就得到了我們需要的字串
具體的實現**為:
#include "stdafx.h"
#include
#include
void subrotate(char *start, char *end)
else
subrotate(xfirst,xend);
subrotate(yfirst,yend);
subrotate(zfirst,zend);
}
}
int main(void)
讀《程式設計師程式設計藝術》筆記
字串迴圈移位
把字串移動n位。可以乙個乙個移動,這樣的話,要移動n次,每次移動len個。演算法時間複雜度為o n len 也可以開闢乙個新的記憶體,把移動的最終位置計算出來,直接放到那裡即可,這樣時間負責度為o 1 空間複雜度為o len 除此之外,還有時間負責度為o 1 空間負責度也為o 1 的演算法。第一種方...
字串迴圈移位
首先,先看看如何對數字進行迴圈移位 c語言中沒有提供迴圈移位的操作符,但可以通過簡潔的方式實現迴圈移位,主要使用移位操作來實現。設乙個運算元x有s位則迴圈左移n位的操作為 x n x s n 同理右移n位位 x n x s n 實際程式設計中可以用巨集定義實現迴圈移位 define rotate l...
字串迴圈移位
問題描述 給定乙個字串,把字串前k個字元移動到尾部。例 字串 abcdefg 左移3為變成 defgabc 解決思路 引入矩陣中 a b ba的思想 a 為a的轉置矩陣 比如 abc cba,defg gfed,cbagfed defgabc。這樣的演算法時間複雜度是o n 空間複雜度是o 1 如下...