Given a string and an offset, rotate string by offset. (rotate from left to right)
Have you met this question in a real interview? Yes
Example
Given “abcdefg”.
offset=0 => “abcdefg”
offset=1 => “gabcdef”
offset=2 => “fgabcde”
offset=3 => “efgabcd”
Challenge
Rotate in-place with O(1) extra memory.
分析
三次翻转法!!!
public class Solution {
/**
* @param str: an array of char
* @param offset: an integer
* @return: nothing
*/
public char[] rotateString(char[] A, int offset) {
// write your code here
if(A==null||A.length==0)
return A;
int len = A.length;
offset %=len;
reverse(A,0,len-offset-1);
reverse(A,len-offset,len-1);
reverse(A,0,len-1);
return A;
}
private void reverse (char[] str,int start,int end){
while (start<end){
char temp =str [start];
str [start] =str[end];
str[end]= temp;
start++;
end--;
}
}
};