题目:
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。
要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。
思路:
把字符串看出两个XY
(XTYT)T=YX
XT为X的旋转操作
1 void inverse(char* start,char* end){ 2 while(start<end){ 3 char temp=*start; 4 *start=*end; 5 *end=*start; 6 start++; 7 end--; 8 } 9 } 10 bool rotate(char *str,int N){ 11 int length=strlen(str); 12 if(N<0||N>length) 13 return false; 14 inverse(str,str+N-1); 15 inverse(str+N,str+length-1); 16 inverse(str,str+length-1); 17 return true; 18 }