剑指 Offer 58 - II. 左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
示例 2:
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"
限制:
1 <= k < s.length <= 10000
解法一:数组(char)
class Solution {
public String reverseLeftWords(String s, int n) {
int len = s.length();
char[] array = new char[len];
for (int i = 0; i < len; i++) {
if(i<n)
//这里做截取数组的赋值
array[len - n + i] = s.charAt(i);
else
array[i-n] = s.charAt(i);
}
String str = new String(array);
return str;
}
}
解法二:StringBuilder
class Solution {
public String reverseLeftWords(String s, int n) {
StringBuilder sb = new StringBuilder();
StringBuilder sb1 = new StringBuilder();
int cnt = 0;
for (Character c : s.toCharArray()) {
if (cnt < n){
sb1.append(c);
cnt++;
}else{
sb.append(c);
}
}
sb.append(sb1);
return sb.toString();
}
}
优化
class Solution {
public String reverseLeftWords(String s, int n) {
StringBuilder sb = new StringBuilder();
for (int i = n; i < s.length(); i++) {
sb.append(s.charAt(i));
}
for (int i = 0; i < n; i++) {
sb.append(s.charAt(i));
}
return sb.toString();
}
}
继续优化
利用%运算
class Solution {
public String reverseLeftWords(String s, int n) {
StringBuilder sb = new StringBuilder();
for (int i = n; i < s.length()+n; i++) {
sb.append(s.charAt(i%s.length()));
}
return sb.toString();
}
}
解法三:字符串切片
class Solution {
public String reverseLeftWords(String s, int n) {
return s.substring(n,s.length())+s.substring(0,n);
}
}
解法四:字符串拼接
class Solution {
public String reverseLeftWords(String s, int n) {
String str = "";
for (int i = n ;i < s.length();i++){
str += s.charAt(i);
}
for(int i = 0; i< n;i++){
str += s.charAt(i);
}
return str;
}
}
- 创建者:师晓峰
- 创建时间:2022/6/5 22:37