字符串循環右移

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章