Description
Given a string and an offset, rotate string by offset. (rotate from left to right)
Example
Given"abcdefg"
.
offset=0 => "abcdefg"
offset=1 => "gabcdef"
offset=2 => "fgabcde"
offset=3 => "efgabcd"
Solution
三次翻转法:
以"abcdefg",offset=1为例,先将"abcde"和"fg"翻转得到"edcbagf",然后整体翻转即得到"gabcdef"
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 == null || str.length == 0) {
return;
}
int n = str.length;
offset = offset % n;
if (offset == 0) {
return;
}
reverseString(str, 0, n - offset - 1);
reverseString(str, n - offset, n - 1);
reverseString(str, 0, n - 1);
}
private void reverseString(char[] str, int start, int end) {
if (start < 0 || end >= str.length || start >= end) {
return;
}
while (start < end) {
char temp = str[start];
str[start++] = str[end];
str[end--] = temp;
}
}
}