定义字符串循环右移操作:把一个长度为N的字符串内的元素循环右移K位,要求时间复杂度为O(N),空间复杂度为O(1),请编写代码实现。
输入样例:N=8的字符串abcdefgh;
输出样例:K=4,即字符元素右移4位,得到efghabcd。
解题思路:运用编程珠玑中讲到的 “三次翻手” 原理。
public class Translator {
public static void rightShift(StringBuilder builder, int n) {
int len = builder.length();
int t = n % len;
reverse(builder, 0, len - t - 1);
reverse(builder, len - t, len - 1);
reverse(builder, 0, len - 1);
}
private static void reverse(StringBuilder builder, int start, int end) {
for (int i = start,j = end; i < j; i++,j--) {
char temp = builder.charAt(i);
builder.setCharAt(i, builder.charAt(j));
builder.setCharAt(j, temp);
}
}
}