JZ43 左旋转字符串
原题链接
描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列 S,请你把其循环左移 K 位后的序列输出(保证 K 小于等于 S 的长度)。例如,字符序列S=”abcXYZdef”,要求输出循环左移 3 位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
示例
输入:"abcXYZdef",3
返回值:"XYZdefabc"
思路
又是偷懒了直接用了String(char[], int, int)的构造方法,然后return两个String相加即可。
然后,还是有这哥的双指针解法,点击查看,顺着这个思路又写了解二。
解答
public class Solution {
//假设输入n是小于str.length()的
public String LeftRotateString(String str,int n) {
int len = str.length();
if (len==0) return "";
if (n >=len) return str;
char[] chars = str.toCharArray();
return new String(chars, n, len-n ) + new String(chars, 0, n);
}
}
解二x
”abcXYZdef“转成"XYZdefabc",就是在数组中把abc逆序,XYZdef逆序,然后整体逆序输出为字符串,
public class Solution {
public static String LeftRotateString(String str,int n) {
int len = str.length();
if (len==0) return "";
if (n >=len|| n<0) return str;
char[] chars = str.toCharArray();
reverse(chars, 0, n-1);
reverse(chars, n, len-1);
reverse(chars, 0, len -1);
return new String(chars);
}
public static void reverse(char[] chars, int from, int to){
while (from< to){
swap(chars, from++, to--);
}
}
public static void swap(char[] chars, int a, int b){
char tmp =chars[a];
chars[a] = chars[b];
chars[b] = tmp;
}
}
本文来自博客园,作者:klaus08,转载请注明原文链接:https://www.cnblogs.com/klaus08/p/15104992.html

JZ43 左旋转字符串
浙公网安备 33010602011771号