解析(局部反转+整体反转)
题目要求:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
大体思路:一般使用切片做最直接。但是如果不能申请额外空间,只能在本串上操作,并且时间复杂度是O(1),怎么做?
局部反转+整体反转,具体做法如下图
注意点:
翻转字符串类型的题目,整体反转+局部反转,或者,局部反转+整体反转,都是一种比较好的思路。
代码:
class Solution {
public String reverseLeftWords(String s, int n) {
StringBuilder str = new StringBuilder();
for (char i : s.toCharArray()) {
str.append(i);
}
reverseString(0, n - 1, str);
reverseString(n, str.length() - 1, str);
reverseString(0, str.length() - 1, str);
return str.toString();
}
public void reverseString(int start, int end, StringBuilder str) {
while (start < end) {
char temp = str.charAt(start);
str.setCharAt(start, str.charAt(end));
str.setCharAt(end, temp);
start++;
end--;
}
}
}
注释:图片来自于代码随想录