题目链接:https://leetcode-cn.com/problems/reverse-string-ii/
题意:
给定一个字符串 s 和一个整数 k,从字符串开头算起,每 2k 个字符反转前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
方法:模拟指针
class Solution {
public:
string reverseStr(string s, int k) {
auto iter = s.begin();//定义指针用于滑动
auto start = iter;//定义每一段的头指针
auto end = iter;//定义每一段的尾指针
int cnt = 0;//计数当前已经几个字符了
int flag = 1;//当前属于需要倒转的片段
while (iter != s.end())//当没有滑动到最后一个元素时
{
if (cnt == k)//如果已经滑动了k个单元
{
if (flag == 1)//flag=1时才需要颠倒
{
end = iter;//更新尾指针
reverse(start, end);//颠倒
}
flag = flag * (-1);//改变flag的状态
cnt = 0;//计数器刷新
start = iter;//更新头指针
continue;
}
iter++;//指针滑动一个单位
cnt++;//计数器更新
}
if (flag == 1) reverse(start, iter);//最后一次如果有必要,也要反转
return s;//返回操作过的字符串
}
};

这篇博客介绍了一种解决 LeetCode 上的翻转字符串 II 问题的方法,使用了模拟指针来实现字符串的分段反转。题目要求根据给定的步长 k 翻转字符串 s 的部分子串,确保每次翻转不超过 k 个字符。博主通过初始化指针、头尾指针和计数器,实现了滑动窗口并反转符合条件的子串。
626

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



