考试结束,班级平均分只拿到了年级第二,班主任于是问道:大家都知道世界第一高峰珠穆朗玛峰,有人知道世界第二高峰是什么吗?正当班主任要继续发话,只听到角落默默响起来一个声音:”乔戈里峰”
每天一道剑指offer-左旋转字符串 https://www.nowcoder.com/practice/12d959b108cb42b1ab72cef4d36af5ec?tpId=13&tqId=11196&tPage=3&rp=3&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
思路
,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。 剑指offer思路,先反转整个字符串,就是fedZYXcba,然后反转前6位XYZdef再反转后三位abc。那么就是XYZdefabc。
代码
public class Solution {
public String LeftRotateString(String str,int n) {
if(str == null || str.equals(""))
return "";
n = n % str.length();
char [] strArray = str.toCharArray();
reverse(strArray,0,str.length()-1);//反转整个字符串
reverse(strArray,0,str.length()-n-1);//反转前字符串长度-n个字符
reverse(strArray,str.length()-n,str.length()-1);//反转后n个字符
return String.valueOf(strArray);
}
public void reverse(char [] strArray,int start,int end)
{//反转字符数组
while(start < end)
{
char ch = strArray[start];
strArray[start] = strArray[end];
strArray[end] = ch;
start++;
end--;
}
}
}