劍指 offer左旋轉字符串_Java

題目:左旋轉字符串
題目描述
彙編語言中有一種移位指令叫做循環左移(ROL),現在有個簡單的任務,就是用字符串模擬這個指令的運算結果。對於一個給定的字符序列S,請你把其循環左移K位後的序列輸出。例如,字符序列S=”abcXYZdef”,要求輸出循環左移3位後的結果,即“XYZdefabc”。是不是很簡單?OK,搞定它!

解題思路:
以S=”abcXYZdef”,要求輸出循環左移3位後的結果爲例:
首先我們可以將這個字符串分爲兩個部分:
(1)前三個字符爲第一部分,abc
(2) 後面的字符爲另外一個部分。XYZdef
分別將這兩個部分進行反轉,得到cba和fedZYX,再將這兩個共同組成的字符串進行反轉cbafedZYX–>XYZdefabc.即得到最終結果。

代碼實現:

import java.util.*;
public class Solution {
    public String LeftRotateString(String str,int n) {
        if(str==null || str.length()<=0) {
			return str;
		}
        char [] chs=str.toCharArray();
		int k=n%(str.length());
		//首先反轉前面的k位
		swap(chs,0,k-1);
		//反轉後面的k-str.length-1
		swap(chs,k,chs.length-1);
		//整體的字符串進行反轉
		swap(chs,0,chs.length-1);
		//System.out.println(Arrays.toString(chs));
		return new String(chs);
    }
	private static void swap(char[] chs, int start, int end) {
		while(start<end) {
			char temp=chs[start];
			chs[start]=chs[end];
			chs[end]=temp;
			start++;
			end--;
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章