题目描述
汇编语言中有一种移位指令叫做循环左移(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; } } }
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于