剑指offer第四十三题。

题目描述

汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!

解题思路

我们可以用一个比较巧妙的方法实现这种循环左移,比如将"abc"拼接成"abcabc",此时如果要循环左移一位,应该变成"bca",那么我通过截取"abcabc"来获得,怎么截取呢?很简单,就是截取n-n+length这个长度即可。

我的答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Solution {
public String LeftRotateString(String str,int n) {
if(str == null || str.length() <= 0){
return "";
}
//复制字符串,比如"abc"复制为`abcabc`
String s = str + str;
int len = str.length();
//算出偏移量
n = n%len;
//开始从n截取,截取到len+n
return s.substring(n,len+n);
}
}