给定一个字符串(以字符数组的形式给出)和一个偏移量,根据偏移量原地
旋转字符串(从左向右旋转)
样例
样例 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)的额外空间
注意事项
offset >= 0
str的长度 >= 0
思路:
先把传入的数组反向,然后排序前offset个,排序后str.size()-size 个
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
if(str.size() == 0 || offset == 1 || str.size() == 1)
return;
offset = offset % str.size();
reverse(str.begin(), str.end());
int i = 0;
int j = 0;
for(i = 0, j = offset - 1; i < offset; i++,j--)
{
if(i < j)
{
char tmp = str[i];
str[i] = str[j];
str[j] = tmp;
}
else
break;
}
for(i = offset, j = str.size()-1; i < str.size(); i++, j--)
{
if(i < j)
{
char tmp = str[i];
str[i] = str[j];
str[j] = tmp;
}
else
break;
}
}
};