问题描述
字符串长度为n,输出循环向左移动i位之后的字符串(i<n)
例:abcdefg 循环向左移动3位之后变为 defgabc
解法1:
模拟循环移动,比较耗时
解法2:
在足够内存的情况下,先将前 i 位字符串保存在一个临时内存中,然后将后面的 (n-i)位向左移动到 i 位,然后将之前保存的 i 位字符串放到移动之后的 (n-i)位字符串后面
解法3:
内存不够或者限制内存使用时,假设字符串s,先保存s[0],然后将s[i]复制到s[0],将s[2*i]复制到s[i],以此类推,直到 r*i >= n,无法再移动,然后将s[0]复制到s[(r-1)*i]。之后开始保存s[1],按上述方法将s[1]复制到s[(r-1)*i+1],... ,最后将s[i-1]移到最末尾,结束。
解法4:
将字符串分为两部分 ab,目标是将ab转变成ba,可以先将a和b分别倒置,定义r(a)为a的倒置串,r(b)为b的倒置串,那么r(r(a)r(b)) = ba,也就是我们想要的结果。