字串處理 旋轉

2021-07-11 09:40:39 字數 1162 閱讀 2469

知識梳理—-字串

一.字串的旋轉

字串的旋轉在形式上如同將乙個字串像位操作那樣進行迴圈左移或者右移。常見的方法是使用暴力進行,即每次記錄最左邊的字元s並將其餘字元向左移動一位,然後將s放在最右邊的位置。將此過程迴圈進行n次,即可實現字串前n為的旋轉。

暴力法**:

(時間複雜度o(mn), 空間複雜度o(1))

#include 

#include

using namespace std;

void leftrotatestring(char *str, int m, int n); //實現長度為m的字串前n為的旋轉

void leftshiftone(char *str, int m); //實現最左邊乙個字元的旋轉

int main()

void leftshiftone(char *str, int m)

str[m - 1] = ch;

}void leftrotatestring(char *str, int m, int n)

}

另外一種比較好的方法是——三步反轉,其具體步驟是:

將原始字串分為待旋轉部分x和不變部分y;

分別反轉兩個部分並從新合併為乙個字串;

將合併後的字串反轉;

eg: 旋轉前三個字元

「abcdef」 —> 「abc」 && 「def」 —> 「cba」 && 「fed」 —>」cbafed」 —> 「defabc」

三步反**

(時間複雜度o(n), 空間複雜度o(1)).

#include 

#include

using namespace std;

void reversestring(char *str, int from, int to);

void leftrotatestring(char *str, int m, int n);

int main()

void reversestring(char *str, int from, int to)

}void leftrotatestring(char *str, int m, int n)

字串旋轉

問題 把字串前面的若干個字元移動到字串的尾部。如把字串abcdef前2位字元移到後面得到字串cdefab。要求時間對長度為n的字串操作的複雜度為o n 輔助記憶體為o 1 看到大多數的帖子都是進行三次旋轉 如 個人感覺這思路確實比較新穎,但是總感覺有點麻煩了,個人思路如下 include inclu...

字串旋轉

字串的左旋轉操作 把字串前面的若干個字元移動到字串的尾部。例如 aabcd左旋乙個字元得到abcda aabcd左旋兩個字元得到bcdaa 同理字串右旋操作 aabcd右旋乙個字元得到daabc aabcd右旋兩個字元得到cdaab 那麼今天就來說一下字串旋轉中的一些問題 首先說一下簡單的,先用函式...

旋轉字串

給定乙個字元型別的陣列 chas 和乙個整數 size,請把大小為 size 的左半區整 體移到右半區,右半區整體移到左邊。例如,如果把 chas 看作字串為 abcde size 3,調整成 deabc 如果 chas 長度為 n,兩道題都要求時間複雜度為 o n 額外空間複雜度為 o 1 兩種解...