在数组上原地旋转,使用O(1)的额外空间
给定一个字符串(以字符数组的形式给出)和一个偏移量,根据偏移量原地
旋转字符串(从左向右旋转)。
样例
样例 1:
输入: str="abcdefg", offset = 3
输出: str = "efgabcd"
样例解释: 注意是原地旋转,即str旋转后为"efgabcd"
样例 2:
输入: str="abcdefg", offset = 0
输出: str = "abcdefg"
样例解释: 注意是原地旋转,即str旋转后为"abcdefg"
思路
只占用O(1)的空间的话,我们可以将offset偏移的过程分解一下。
比如,offset=5,那我们就做5次offset为1的操作
每一步:从最后一个字符开始让它们每个都等于前面的那个字符的值,当然我们要先记录下最后一个字符的值,在这一个循环结束的时候将其赋给str[0]。
代码
class Solution {
public:
void rotateString(string &str, int offset) {
int str_len = str.length();
if(str_len == 0) return ;
offset %= str_len;
for(int i=0;i<offset;i++){
char temp = str[str_len-1];
for(int j=str_len-1;j>0;j--){
str[j]=str[j-1];
}
str[0]=temp;
}
}
};