描述
给定一个字符串(以字符数组的形式给出)和一个偏移量,根据偏移量原地
旋转字符串(从左向右旋转)。
offset >= 0
the length of str >= 0
说明
原地旋转
意味着你要在s本身进行修改。你不需要返回任何东西。
样例
样例 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"
public class Solution {
/**
* @param str: An array of char
* @param offset: An integer
* @return: nothing
*/
public void rotateString(char[] str, int offset) {
// write your code here
if(str.length==0){
return;
}
int offset1 = offset%str.length;
reset(str,str.length-offset1,str.length-1);
reset(str,0,str.length-offset1-1);
reset(str,0,str.length-1);
}
//start和end为索引,包含这两个索引的值
public void reset(char[] str,int start,int end){
for(int i=start;i<(start+end-1)/2+1;i++){
char temp = str[i];
str[i] = str[end-i+start];
str[end-i+start] = temp;
}
}
}
取两个索引的中间索引 (start+end-1)/2+1