左旋转字符串(Java)-循环Index方式
题目要求
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
我的思考
我们通过观察发现,左移几位,就是开始从哪位输出,但是输出的长度还是字符串本身的长度,也就是说,左移3位,那么就是从原始字符串的index=3处开始输出,输出的个数仍然是字符串长度的个数,这样肯定就越界了,所以,我们在取index的时候用index = index % str.length;让其在超出了字符串长度就返回到最前边取值。就循环起来了、
我的代码
package jianzhioffer;
/**
* @author jiyongjia
* @create 2020/6/25 - 14:43
* @descp: 左旋字符串
* 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。
* 对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。
* 例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
*/
public class P13_LeftRotateString {
public static void main(String[] args) {
String str = "abcdefg";
String string = LeftRotateString(str, 2);
System.out.println(string);
}
public static String LeftRotateString(String str,int n) {
int length = str.length();
StringBuilder builder = new StringBuilder();
while(length>0){
builder.append(str.charAt(n++%str.length()));
//减1
length--;
}
return builder.toString();
}
}
测试输出
输入:"abcdefg" ,左移2位
输出: