给定字符串"abcdef",若要将"def"移动到”abc“的前面。
这里介绍一种三步翻转的方法:
(1)将原字符串分为M和N两部分,其中M为”abc“,N为"def"。
(2)先把M、N的内部分别翻转得到"cba"、"fed"。
(3)再把上述得到的结果整体翻转即可。
参考代码如下:
1 void ReverseString(char* s, int from, int to) 2 { 3 while(from < to) 4 { 5 char t = s[from]; 6 s[from++] = s[to]; 7 s[to--] = t; 8 } 9 } 10 11 void LeftRotateString(char* s, int n, int m) 12 { 13 m %= n; 14 ReverseString(s, 0, m-1); 15 ReverseString(s, 0, m-1); 16 ReverseString(s, 0, m-1); 17 }
其时间复杂度为O(n),空间复杂度为O(1).
原文:http://www.cnblogs.com/gelh/p/7712335.html