定義字符串的左旋轉操做:把字符串前面的若干個字符移動到字符串的尾部。數組
如把字符串 abcdef 左旋轉 2 位獲得字符串 cdefab。請實現字符串左旋轉的函數。函數
要求時間對長度爲 n 的字符串操做的複雜度爲 O(n),輔助內存爲 O(1)。code
網上看到解法不少種,就不詳細說明了。內存
我採用的是數組不對稱的交換時間複雜度應該是O(n)。字符串
#include "stdio.h" #include "stdlib.h" void reverse_str(char str[],int n,int m); int main(void) { char str[] = "abcdef"; reverse_str(str,6,2); return 0; } //str爲字符串數組,n爲數組長度,m爲左移位數 void reverse_str(char str[],int n,int m) { int i,j; char tmp; for(i=0,j=n-1;i<j;i++,j--) { tmp = str[i]; str[i] = str[j]; str[j] = tmp; } for(i=0,j=n-m-1;i<j;i++,j--) { tmp = str[i]; str[i] = str[j]; str[j] = tmp; } for(i=n-m,j=n-1;i<j;i++,j--) { tmp = str[i]; str[i] = str[j]; str[j] = tmp; } printf("%s\n",str); }