ever bcd 复杂度 int while color 结果 得到 div
给定字符串"abcdef",若要将"def"移动到”abc“的前面。
这里介绍一种三步翻转的方法:
(1)将原字符串分为M和N两部分,其中M为”abc“,N为"def"。
(2)先把M、N的内部分别翻转得到"cba"、"fed"。
(3)再把上述得到的结果整体翻转即可。
参考代码如下:
- void ReverseString(char* s, int from, int to)
- {
- while(from < to)
- {
- char t = s[from];
- s[from++] = s[to];
- s[to--] = t;
- }
- }
- void LeftRotateString(char* s, int n, int m)
- {
- m %= n;
- ReverseString(s, 0, m-1);
- ReverseString(s, 0, m-1);
- ReverseString(s, 0, m-1);
- }
其时间复杂度为O(n),空间复杂度为O(1).
字符串的翻转问题
来源: http://www.bubuko.com/infodetail-2362011.html