题目描述:
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1:
输入: s = “abcdefg”, k = 2 输出: “cdefgab” 示例 2:
输入: s = “lrloseumgh”, k = 6 输出: “umghlrlose”
简单解法:一、:
class Solution {
public String reverseLeftWords(String s, int n) {
char [] c=s.toCharArray();
StringBuffer sb=new StringBuffer();
sb.append(Arrays.copyOfRange(c,n,c.length));
sb.append(Arrays.copyOfRange(c,0,n));
return sb.toString();
}
}
二、
class Solution {
public String reverseLeftWords(String s, int n) {
return s.substring(n,s.length())+s.substring(0,n);
}
}
空间复杂度为0的解法:局部旋转字符串
class Solution {
public String reverseLeftWords(String s, int n) {
int len=s.length();
StringBuilder sb=new StringBuilder(s);
reverseString(sb,0,n-1);
reverseString(sb,n,len-1);
return sb.reverse().toString();
}
public void reverseString(StringBuilder sb, int start, int end) {
while (start < end) {
char temp = sb.charAt(start);
sb.setCharAt(start, sb.charAt(end));
sb.setCharAt(end, temp);
start++;
end--;
}
}
}
这是第四题旋转字符串的题目,总结知识点如下:
1.在有规律反转的题目中,注意循环中的周期。
2.在局部反转的题目中,注意先做好能局部反转无误的前提(trim()——去空格、spilt()——分隔符。
3.可反转调换顺序得到想要的结果。