题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列 S,请你把其循环左移 K 位后的序列输出。例如,字符序列 S=”abcXYZdef”,要求输出循环左移 3 位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
解题思路
-
如果可以用 substring(),直接用 substring();
-
如果不可以,用字符数组替换移位。原理:YX = (X.T Y.T).T
代码
代码 1
public class Solution {
public String LeftRotateString(String str,int n) {
if (str == null || str.length() == 0)
return "";
int length = str.length();
n = n % length;
String right = str.substring(0, n);
String left = str.substring(n, length);
return left + right;
}
}
代码 2
public class Solution {
public String LeftRotateString(String str,int n) {
if (str == null || str.length() == 0)
return "";
char[] cs = str.toCharArray();
n %= cs.length;
swap(cs, 0, n);
swap(cs, n, cs.length);
swap(cs, 0, cs.length);
return String.valueOf(cs);
}
private void swap(char[] cs, int start, int end) {
for (int i = start; i < (start+end)/2; i++) {
char tmp = cs[i];
cs[i] = cs[end+start-1-i];
cs[end+start-1-i] = tmp;
}
}
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于