描述
给定一个字符串str和一个偏移量,根据偏移量原地旋转字符串(从左向右旋转)。
对于不同的语言,str将以不用的形式给出,例如对于字符串 “abc” ,将以下面的形式给出
Java: char[] str = {‘a’, ‘b’, ‘c’};
Python:str = [‘a’, ‘b’, ‘c’]
C++:string str = “abc”;
样例
样例 1:
输入:
输出:
解释:
注意是原地旋转,即str旋转后为"efgabcd"
样例 2:
输入:
输出:
解释:
注意是原地旋转,即str旋转后为"gabcdef"
样例 3:
输入:
输出:
解释:
注意是原地旋转,即str旋转后为"gabcdef"
样例 4:
输入:
输出:
解释:
注意是原地旋转,即str旋转后为"fgabcde"
样例 5:
输入:
输出:
解释:
注意是原地旋转,即str旋转后为"efgabcd"
代码示例
三步反转
此方法分3个步骤:
(1)将原字符串分为X和Y两部分,其中X为“abc”,Y为“def”;
(2)将X的所有字符反转,即相当于将“abc”变为“cba”;对Y也进行反转,由“def”变为“fed”;
(3)最后,将上述步骤得到的结果整体再进行反转,即将“cbafed”整体反转为“defabc”,这样就实现了字符串旋转。
public class Solution {
/**
* @param s: An array of char
* @param offset: An integer
* @return: nothing
*/
public void rotateString(char[] s, int offset) {
// write your code here
int len = s.length;
if(s==null||s.length==0) return;
offset = offset%len;
reserve(s, 0, len-offset-1);
reserve(s, len-offset, len-1);
reserve(s, 0, len-1);
}
public void reserve(char[]s,int left,int right){
while(left<right){
char tmp = s[left];
s[left++]=s[right];
s[right--]=tmp;
}
}
}