题目描述
我的解法
思路
使用StringBuilder,先将n~ str.length这部分的字符串加入,再将0~n-1这部分的字符串加入
对应Java代码
class Solution {
public String reverseLeftWords(String s, int n) {
StringBuilder tmp = new StringBuilder();
for(int i = n; i < s.length(); i++){
tmp.append(s.charAt(i));
}
for(int j = 0; j < n; j++){
tmp.append(s.charAt(j));
}
return tmp.toString();
}
}
复杂度分析
时间复杂度:O(n)
空间复杂度:O(n)
更优解法
思路
直接使用字符串切片
对应Java代码
真就一行代码
class Solution {
public String reverseLeftWords(String s, int n) {
return s.substring(n, s.length()) + s.substring(0, n);
}
}
复杂度分析
时间复杂度:O(N)
其中 N 为字符串 s 的长度,字符串切片函数为线性时间复杂度
空间复杂度:O(N)
两个字符串切片的总长度为 N
收获总结
看力扣上大佬提供的几种题解,学到了新的知识,因为在Java中字符串为“不可变对象”,因此每次使用字符串+操作都要创建新的字符串