1. 程式人生 > >【劍指offer】之左旋轉字串

【劍指offer】之左旋轉字串

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

分析:

方法一,先求出左移一位的函式,然後就可以得出左移n位的函式。

java程式碼實現:

	//左移n 位
	private static String turnLeftWithNum(String str, int n) {
		for(int i=0;i<n;i++) {
			String temp = turnLetfonce(str);
			str = temp;
		}
		
		return str;
	}
	
	//左移一位
	private static String turnLetfonce(String str) {
		char[] temp = new char[str.length()];
		for(int i=0;i<str.length();i++) {
			temp[i] = str.charAt(i);
		}
		char c = temp[0];
		int i=0;
		for(;i<str.length()-1;i++) {
			temp[i] = temp[i+1] ;
		}
		temp[i] = c;
		return new String(temp);
	}

方法二(offer上面的方法)

 

java程式碼實現:

	//左移n位
	private static String RoLString(String str,int n) {
		if(str == null || n < 1)
			return null;
		String temp = Reverse(str,0,n-1);
		temp = Reverse(temp,n,temp.length()-1);
		temp = Reverse(temp,0,temp.length()-1);
		
		return temp;
	}
		//翻轉一個單詞。
	private static String Reverse(String str,int start,int end) {
		char[] temp = new char[str.length()];
		for(int i=0;i<str.length();i++) {
			temp[i] = str.charAt(i);
		}
		
		while(start < end) {
			char c = temp[start];
			temp[start] = temp[end];
			temp[end] = c;
			start ++;
			end--;
		}
		
		return new String(temp);
	}