8. 旋转字符串
中文English
给定一个字符串(以字符数组的形式给出)和一个偏移量,根据偏移量原地
旋转字符串(从左向右旋转)。
样例
样例 1:
输入: str="abcdefg", offset = 3
输出: str = "efgabcd"
样例解释: 注意是原地旋转,即str旋转后为"efgabcd"
样例 2:
输入: str="abcdefg", offset = 0
输出: str = "abcdefg"
样例解释: 注意是原地旋转,即str旋转后为"abcdefg"
样例 3:
输入: str="abcdefg", offset = 1
输出: str = "gabcdef"
样例解释: 注意是原地旋转,即str旋转后为"gabcdef"
样例 4:
输入: str="abcdefg", offset =2
输出: str = "fgabcde"
样例解释: 注意是原地旋转,即str旋转后为"fgabcde"
样例 5:
输入: str="abcdefg", offset = 10
输出: str = "efgabcd"
样例解释: 注意是原地旋转,即str旋转后为"efgabcd"
挑战
在数组上原地旋转,使用O(1)的额外空间
说明
原地旋转
意味着你要在s本身进行修改。你不需要返回任何东西。
注意事项
offset >= 0
the length of str >= 0
Make changes on the original input data
C++实现:
class Solution {
public:
/**
* @param str: An array of char
* @param offset: An integer
* @return: nothing
*/
void rotateString(string &str, int offset) {
// write your code here
std::vector<char> str_char;
int strLenght = 0;
int offset_true = 0;
// int i = 0;
while(str[strLenght] != '\0'){
// i++;
str_char.push_back(str[strLenght]);
strLenght++;
}
if(strLenght == 0)
return;
offset_true = offset%strLenght;
/* for(int j=0;j<offset_true;j++)
{
}*/ //reverse(str_char.begin(),str_char.end());
int m = 0;
for(int k=strLenght-offset_true;k<str_char.size();k++){
str[m] = str_char[k];
m++;
}
for(int f=0;f<str_char.size() - offset_true;f++){
str[m] = str_char[f];
m++;
}
return;
}
};