定义字符串的左旋转操作,把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab,请实现字符串左旋转函数。
要求时间复杂度O(n),空间复杂度O(1).
解法是将前k个字符串反转,后面的字符串同样反转,再对整个字符串进行一次翻转。
1 void swap(string &a,int low,int high)
2 {
3 char temp;
4 while(low<high)
5 {
6 temp = a[low];
7 a[low] = a[high];
8 a[high] = temp;
9 low++;
10 high--;
11 }
12 }
13
14 if(str.length()<=k)return 0;
15 swap(str,0,k-1);
16 swap(str,k,str.length()-1);
17 swap(str,0,str.length()-1);
2 {
3 char temp;
4 while(low<high)
5 {
6 temp = a[low];
7 a[low] = a[high];
8 a[high] = temp;
9 low++;
10 high--;
11 }
12 }
13
14 if(str.length()<=k)return 0;
15 swap(str,0,k-1);
16 swap(str,k,str.length()-1);
17 swap(str,0,str.length()-1);