描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列 S,请你把其循环左移 K 位后的序列输出(保证 K 小于等于 S 的长度)。例如,字符序列S=”abcXYZdef”,要求输出循环左移 3 位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
示例1
输入:"abcXYZdef",3
返回值:"XYZdefabc"
第一种解法
利用强大的java 工具类来完成,直接使用string.substring,代码如下
public String firstLeftRotateString(String str,int n) {
if(null == str || str.length() < n){
return str;
}
return str.substring(n,str.length()) + str.substring(0,n);
}
第二种解法
将字符序列s转换为一个char数组chars,并且将前k个字符,存到单独的一个数组里面result,并且将数组chars后面的字符往前移动,最后将result放在chars数组后面即可,代码如下
public String senondLeftRotateString(String str,int n) {
if(null == str || str.length() < n){
return str;
}
char[] chars = str.toCharArray();
char[] result = new char[n];
for (int i = 0; i < n; i++) {
result[i] = chars[i];
}
int j = 0;
for (int i = chars.length -n; i <chars.length; i++) {
chars[j] = chars[i];
}
for (int i = 0; i < chars.length-n; i++) {
chars[i] = chars[i+n];
}
j = 0;
for (int i = chars.length -n; i < chars.length;i++){
chars[i] = result[j++];
}
return String.valueOf(chars);
}