题目来源:https://leetcode-cn.com/problems/reverse-string-ii/
大致题意:
给定一个字符串,和一个整数k。从字符串开头开始,每2k个字符,就将前k个字符翻转。
- 若剩余字符小于k个,将其全部翻转
- 若剩余字符小于2k个,将前k个翻转
给出翻转后的字符串
思路
滑动窗口模拟
使用一个大小为2k的滑动窗口对字符串进行遍历,每次将前k个字符串翻转。为了防止最后一段窗口内的字符串长度小于k,可使用
- min(i+k, n)来表示翻转的右边界,其中 n 为字符串长度,i 为每次窗口的左边界
代码:
public String reverseStr(String s, int k) {
char[] str = s.toCharArray();
int n = s.length();
for (int i = 0; i < n; i += 2*k) {
// 将前k个字符翻转,使用min来处理最后一段
reverse(str, i, Math.min(n, i+k)-1);
}
return new String(str);
}
public void reverse(char[] str, int begin, int end) {
while (begin < end) {
char c = str[begin];
str[begin] = str[end];
str[end] = c;
begin++;
end--;
}
}
本文解析了LeetCode题目Reverse String II,介绍了如何使用滑动窗口模拟的方法,通过一个大小为2k的窗口对字符串进行操作,确保每次翻转前k个字符,并处理特殊情况。代码展示了如何将前k个字符反转,适用于字符串处理和算法面试题目的解决。
1828

被折叠的 条评论
为什么被折叠?



