题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
思路:1. 先进行一个边界处理,把字符串转成字符数组
2.先反转前n个,然后反转后面的
3.整体反转。
4.字符数组转字符串输出
public class Solution {
public String LeftRotateString(String str,int n) {
//如果字符串为空,字符长度小于2,或者要转的字符串长度小于左边
if(str == null || str.length()<2 ||str.length()<=n)
{
return str;
}
char[] charArray = str.toCharArray();
//翻转前n个
reverse(charArray,0,n-1);
//翻转后面的
reverse(charArray,n,charArray.length-1);
//整体翻转
reverse(charArray,0,charArray.length-1);
return String.valueOf(charArray);
}
//反转字符
private void reverse(char[] array,int start,int end)
{
//定义空字符用于交互
char temp = ' ';
//从起始位置
while(start < end)
{
//把开始交换。
//把开始交换。
//a->kong
temp = array[start];
//c->a并且移动
array[start++] = array[end];
a->c.交换了ac,并且更新下标
array[end--] = temp;
}
}
}