定義字符串循環右移操作:把一個長度爲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);
}
}
}