这个题目很简单,只是在旋转的时候有一个很巧妙的方法,从转动的位置开始将两个部分反转,然后再将整个字符串反转即可
比如需要将12345变成34512
1. 12345 -> 21345
2. 21345 -> 21543
3. 21543 -> 34512
public class Solution {
/**
* @param str: an array of char
* @param offset: an integer
* @return: nothing
*/
public void rotateString(char[] A, int offset) {
// write your code here
if (A == null || A.length == 0) {
return;
}
offset = offset % A.length;
reverse(A, 0, A.length - offset - 1);
reverse(A, A.length - offset, A.length - 1);
reverse(A, 0, A.length - 1);
return;
}
private void reverse(char[] A, int start, int end) {
for (int i = start, j = end; i < j; i++, j--) {
char temp = A[i];
A[i] = A[j];
A[j] = temp;
}
}
}