题目
汇编语言中有一种移位指令叫做循环左移(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 --;
}
}
}