要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。
思路:编程之美上的老题。但是思路比较巧。如果不认真观察,一般想不到。。。反正我是想不到。。。
贴上代码:
/*=========================================================*\26.左旋转字符串(字符串)题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。\*=========================================================*/#includeusing namespace std;void reverse(char *index,int begin,int end){ int i = begin; int j = end; char temp; while(i < j){ temp = index[i]; index[i] = index[j]; index[j] = temp; ++i; --j; }}void rightShift(char *index,int length,int k){ k %= length; reverse(index,0,k-1); reverse(index,k,length-1); reverse(index,0,length-1);}void displayList(char *index,int length){ for(int i = 0;i