参考牛客“jianghan0712”的解答:https://www.nowcoder.com/questionTerminal/12d959b108cb42b1ab72cef4d36af5ec?f=discussion
思路分析:
反复利用字符串翻转
向左循环移动可以分作三次翻转得到。假设向左循环移动N个,字符串左边N个字符设为X,剩余部分设为Y,题目是想实现XY变成YX.
实现步骤分为三步:
- X翻转
- Y翻转
- XY翻转
字符数组转成字符串是不能像Int型那样使用.toString()转成字符串的。需要一个个遍历,或者使用StringUtils的join方法。参考:https://www.cnblogs.com/ooo0/p/9169311.html
“笑叹词穷”的字符翻转总结:https://www.cnblogs.com/binye-typing/p/9260994.html
题目描述:
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
Java代码:
public class Solution {
public String LeftRotateString(String str,int n) {
if(str.length()==0||n==0){//n为0,返回原字符串
return str;
}
char [] res=str.toCharArray();
Reverse(res,0,n-1);
Reverse(res,n,str.length()-1);
Reverse(res,0,str.length()-1);
String result ="";
for(int i=0;i<str.length();i++){//数组转字符串
result +=res[i];
}
return result;
}
public static void Reverse(char[]arr,int i,int j){
while(i<=j){
char temp=arr [j];
arr [j--]=arr [i];
arr [i++]=temp;
}
}
}