Given a string(Given in the way of char array), a right offset and a left offset, rotate the string by offset in place.(left offest represents the offset of a string to the left,right offest represents the offset of a string to the right,the total offset is calculated from the left offset and the right offset,split two strings at the total offset and swap positions)。
Example
Example 1:
Input:str ="abcdefg", left = 3, right = 1
Output:"cdefgab"
Explanation:The left offset is 3, the right offset is 1, and the total offset is left 2. Therefore, the original string moves to the left and becomes "cdefg"+ "ab".
Example 2:
Input:str="abcdefg", left = 0, right = 0
Output:"abcdefg"
Explanation:The left offset is 0, the right offset is 0, and the total offset is 0. So the string remains unchanged.
Example 3:
Input:str = "abcdefg",left = 1, right = 2
Output:"gabcdef"
Explanation:The left offset is 1, the right offset is 2, and the total offset is right 1. Therefore, the original string moves to the left and becomes "g" + "abcdef".
思路:仔细读题,弄懂题意,左右移动是根据左右移动的大小来决定的,shift很简单。注意两点一个是取模,另外一个是substring的end是不包括的。
public class Solution {
/**
* @param str: An array of char
* @param left: a left offset
* @param right: a right offset
* @return: return a rotate string
*/
public String RotateString2(String str, int left, int right) {
if(str == null || str.length() == 0 || left == right) return str;
int n = str.length();
int diff = (left - right) % n;
if(diff > 0) {
return str.substring(diff) + str.substring(0, diff);
} else {
return str.substring(n + diff) + str.substring(0, n+diff);
}
}
}