原题:
给定一个字符串(以字符数组的形式给出)和一个偏移量,根据偏移量原地旋转字符串(从左向右旋转)。
offset >= 0
the length of str >= 0
Make changes on the original input data
说明
原地旋转意味着你要在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){
}else{
int offset1 = offset%(str.length);
char[] strlast = new char[offset1];
char[] strfirst = new char[str.length-offset1];
for(int i=0;i<offset1;i++){
strlast[i] = str[str.length-offset1+i];
}
for(int i=0;i<str.length-offset1;i++){
strfirst[i] = str[i];
}
for(int i=0;i<str.length;i++){
if(i<offset1){
str[i] = strlast[i];
}else{
str[i] = strfirst[i-offset1];
}
}
}
}
}
思路
str.length==0
判断输入char[]
是否为空,如果是空,不作改变。offset1 = offset%(str.length)
当offset
大于数组长度时,需要对offset取余。- 根据取余后的
offset1
作为分界点,得到俩个新的char[]
,分别strfirst[]
、strlast[]
。 - 赋值给原
str
实现原地旋转。