提示
LintCode中的相关算法题实现代码,可以在我的GitHub中下载。
题目需求
给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)
样例
对于字符串 "abcdefg"
.
offset=0 => "abcdefg"
offset=1 => "gabcdef"
offset=2 => "fgabcde"
offset=3 => "efgabcd"
挑战
在数组上原地旋转,使用O(1)的额外空间
解题思路
思路主要分为三步部:
第一步:我们将字符串全部旋转一遍,例如"abcdefg"旋转为"gfedcba"
第二步:根据给出的偏移量,我们从下表为偏移量的位置在左边进行旋转。
第三步: 根据给出的偏移量,对偏移量右边的进行旋转。
实现代码
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(offset==0||str.size()==0) return;
//str.reserve();
offset=offset%str.size();
char tmp;
int low=0;
int high=str.size()-1;
while(low<high)
{
tmp=str[high];
str[high]=str[low];
str[low]=tmp;
low++;
high--;
}
low=offset;
high=str.size()-1;
while(low<high)
{
tmp=str[high];
str[high]=str[low];
str[low]=tmp;
low++;
high--;
}
low=0;
high=offset-1;
while(low<high)
{
tmp=str[high];
str[high]=str[low];
str[low]=tmp;
low++;
high--;
}
}
};