左旋轉字符串
阿新 • • 發佈:2017-06-04
abcd div 操作 amp fine 字符串 vol 轉字符串 ret
題目描述:
定義字符串的左旋轉操作:把字符串前面的若幹個字符移動到字符串的尾部,如把字符串abcdef左旋轉2位得到字符串cdefab。
請實現字符串左旋轉的函數,要求對長度為n的字符串操作的時間復雜度為O(n),空間復雜度為O(1)。
我的思路有點簡單,就是從斷點開始從前往後依次將後面的字符向前移動一位,再把最後面的那個字符換成斷點之前的字符
#include<stdio.h> #include<string.h> #define N 100 void leftRevolve(char *Inputstr, int n) { int slen = strlen(Inputstr); int flag = 1; int j; char c; for (int i = 1; i <= n;) { if (flag) { j = n - i; c = Inputstr[j]; } if (j < slen - i) { Inputstr[j] = Inputstr[++j]; flag = 0; } else { Inputstr[j] = c; ++i; flag = 1; } } } int main() { int n; scanf("%d", &n); char Inputstr[N]; scanf("%s", Inputstr); leftRevolve(Inputstr, n); printf("左旋轉%d位後字符串變為%s\n", n, Inputstr); return 0; }
左旋轉字符串