给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)
样例:php
对于字符串 "abcdefg".
offset=0 => "abcdefg"
offset=1 => "gabcdef"
offset=2 => "fgabcde"
offset=3 => "efgabcd"
算法要求:web
在数组上原地旋转,使用O(1)的额外空间
解题思路:算法
用直接定位法,来进行每一个字符的定位。能够理解城对号入座,只须要进行n-1次就能够了。
此算法的时间复杂度为O(n),进行n-1次交换。
算法以下:数组
void rotateString(string &str, int offset) {
int length = str.length();
int now = 0;//当前last位置所表明字符的初始位置
int last = 0;//考虑到能够能重复循环,用来记录是否重复了,
char tempStr;
if (length == 0 || str == NULL) {
return;
}
if (offset >= length) {
offset = offset % length;
}
if (offset == 0) {
return;
} else {
for (int i = 1; i < length ; i++) {
tempStr = str[abs((offset + now) % length)];
str[abs((now + offset) % length)] = str[last];
str[last] = tempStr;
now = abs((offset + now) % length);
if (now == last) {//若是重复操做了,就进行+1操做
last++;
now = last;
}
}
}
}