题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
解题思路—使用substring:使用库函数substring,进行字符串切割再拼接。不推荐,题目考察重点不是这个。
解题思路—字符串翻转:假设字符串str=abcdefgh,n=3,设X=abcde,Y=fgh,所以字符串可以表示成XY,要求YX。假设X的翻转为XT,XT=edcba,同理YT=hgf,那么YX=(XT+YT)T,三次翻转后可得结果。推荐!
Java解题—使用substring
public class Solution {
public String LeftRotateString(String str,int n) {
if(n==0 || str.length()==0)
return str;
n %= str.length();
return str.substring(n, str.length()) + str.substring(0, n);
}
}
Java解题—字符串翻转
public class Solution {
public String LeftRotateString(String str,int n) {
if(n==0 || str.length()==0)
return str;
n %= str.length();
char[] chars = str.toCharArray();
// 翻转三次
reverse(chars, 0, n-1);
reverse(chars, n, chars.length-1);
reverse(chars, 0, chars.length-1);
return new String(chars);
}
public void reverse(char[] chars, int i, int j){
while(i<j){
char temp = chars[i];
chars[i++] = chars[j];
chars[j--] = temp;
}
}
}