【力扣刷题】541. 反转字符串II-双指针
给定一个字符串 s
和一个整数 k
,从字符串开头算起,每计数至 2k
个字符,就反转这 2k
字符中的前 k
个字符。
- 如果剩余字符少于
k
个,则将剩余字符全部反转。 - 如果剩余字符小于
2k
但大于或等于k
个,则反转前k
个字符,其余字符保持原样。
示例 1:
输入:s = "abcdefg", k = 2 输出:"bacdfeg"
示例 2:
输入:s = "abcd", k = 2 输出:"bacd"
提示:
1 <= s.length <= 104
s
仅由小写英文组成1 <= k <= 104
class Solution {
public:
void reverse(string& s,int l, int r){
while(l<r){
char t=s[l];
s[l]=s[r];
s[r]=t;
l++,r--;
}
}
string reverseStr(string s, int k) {
int pos=0,n=s.size();
while(pos<n){
//剩余字符串大于等于k的情况
if(pos + k < n) reverse(s, pos, pos+k-1);
//剩余字符串不足k的情况
else reverse(s, pos, s.size()-1);
pos += 2 * k;
}
return s;
}
};
版权声明:
作者:Zhang, Hongxing
链接:http://zhx.info/archives/436
来源:张鸿兴的学习历程
文章版权归作者所有,未经允许请勿转载。
THE END
二维码
文章目录
关闭