①思路
1.利用双指针实现一个区间内字符串的反转
注意:左闭右开区间
2.动画引入
反转字符串Ⅱ(双指针)
3.具体思路
slow作为起始点,fast作为终点。
当fast-slow==k时(或者遍历结束)
处理区间(反转)。
当fast-slow==2k时(或者遍历结束)
更新slow的值,重新确定区间起点
②代码实现
class Solution {
public:
void myReverse(string&s,int slow,int fast){//左闭右开
fast--;
while(slow<fast){
swap(s[slow++],s[fast--]);
}
}
string reverseStr(string s, int k) {
int slow = 0;
int fast = 0;
//可以使用一次性跳跃k个单位长度!
while(fast<s.size()){
//前k个
for(int j = 0;j<k&&fast<s.size();j++){
fast++;
}
myReverse(s,slow,fast);
//2k中的后k个
for(int j = 0;j<k&&fast<s.size();j++){
fast++;
}
slow = fast;
}
return s;
}
};
③优化
这段代码是一个一个累加,其实可以修改成k个k个的添加。
具体实现请看:代码随想录