定义字符串的左旋转操作,把字符串前面的若干个字符移动到字符串的尾部。如把字符串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);