文章目录
Leetcode541
1.问题描述
【Leetcode字符串】541. 反转字符串 II(模拟的好坏之分!!)Leetcode541 2.解决方案
思路很简单就直接模拟,但是时间上需要很好的模拟,统一化处理才会很快,前面错误的就是没模拟好,后面的算法模拟的很好,这个回来看看慢慢熏陶!
//错误麻烦的
class Solution {
public:
string reverseStr(string s, int k) {
int count=0;
for(int i=0;i<s.size();i++){
count++;
if((count%(2*k)==0)) reverse(s[i-2*k+1],s[i-2*k+1+k]);
}
int end=count%(2*k);
if(end<k){
reverse(s[s.size()-end],s[s.size()]);
}
if(end>=k){
reverse(s[s.size()-end],s[s.size()]);
}
}
};
//正确的简洁的
class Solution1 {
public:
string reverseStr(string s, int k) {
for (int i=0; i<s.size();i+=(2 * k)) {
//将以下两种情况统一处理,reverse左闭右开
//1.每隔2k个字符的前k个字符进行反转
//2.剩余字符小于2k但大于或等于k个,则反转前k个字符
if (i + k <= s.size()) {
reverse(s.begin() + i, s.begin() + i + k );
continue;
}
//3.剩余字符少于k个,则将剩余字符全部反转
reverse(s.begin() + i, s.begin() + s.size());
}
return s;
}
};