左旋转字符串

Posted by DH on July 19, 2017

题目

汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S, 请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!

分析

有一个字符串abcdefgh,要求左移三位。

我们先将字符串转换成数组,先让前三位字符串反转,结果是cbadefgh

接着让第四位到最后一位字符串反转,结果是cbahgfed.

最后将这个字符串完全反转,得到defghabc,正是我们要的结果。

代码

public class Solution {
    public String LeftRotateString(String str,int n) {
         if (str.length() == 0 || str.length() < n || n <0) {
			return "";
		}
		 
		 char [] charArray = str.toCharArray();
		 reverse(charArray, 0, n-1);
		 reverse(charArray, n, charArray.length - 1);
		 reverse(charArray, 0, charArray.length-1);
		 
	     return new String(charArray);
    
    }  
    public void reverse(char[] chars,int low,int high)
	 {
		 char temp;
		 while (low < high) {
			temp = chars[low];
			chars[low] = chars[high];
			chars[high] = temp;
			low ++;
			high --;
			
		}
	 }
}