法一:將字串(eg:abcd)的首位(a)通過建立臨時變數儲存起來,其餘部分向左移動一位(bcd_),再將儲存起來的首位放在此時移動後的字串的最後一位(bcda),至此字串整體像左移一位。重複進行上述操作,便可得到向左旋轉k位的字串。如此例4所示旋轉2次和旋轉6次得到的結果相同,令len為字串的長度,那麼可以旋轉n%len次,得到結果。
#include
#include
void left_revolve(char
str,int len,int k)
str[len-1] = tmp;
}}int main()
執行結果
法二:例:將abcd向左旋轉2位。先將字串的前2個字元逆置得到ba,再將剩餘的字元逆置得到dc,現在的字串為badc,最後將整個字串逆置得到cdab,即abcd向左旋轉兩位的字串。
由此,我們可以將字串的前k個字元逆置,再將剩餘的字元逆置,最後將整個字串逆置,這樣便可以得到旋轉k位的字串了。
#include
#include
void reverse(char *start,char *end)
}void left_revolve(char *str,int len,int k)
int main()
執行結果
法一:通過左旋字串我們可以得到啟示,要判斷乙個字串(1)是不是另乙個字串(2)旋轉得到的,可以判斷這個字串(2)通過左旋、右旋能否得到另乙個字串(1)。
#include
#include
void left_revolve(char
str,int len,int k)
str[len-1] = tmp;
}}void right_revolve(char
str,int len,int k)
str[0] = tmp;
}}int revolve(char str1,char str2,int len1,int len2)
else
return
0; }
}int main()
執行結果
法二:重新建立乙個字串將字串1拷貝至這個新字串,再將這兩個字串拼接在一起,再判斷字串2是不是這個新字串的子串即可。
#include
#include
int revolve(const
char *str1,const
char *str2)
int main()
執行結果 字串旋轉
問題 把字串前面的若干個字元移動到字串的尾部。如把字串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 兩種解...