暴力枚举
根据题目要求,把所有情况一一列举出来
我没列举完,只通过了给的两个测试用例:
class Solution {
public:
string reverseStr(string s, int k) {
int size=s.size();
if(size<2*k)return s;
swap(s[k-2],s[k-1]);
if(size-(2*k)<k)
{
for(int i=(2*k)+1;i<s.size();i++)
{
swap(s[i],s[i+1]);
}
}
else if(size-(2*k)<2*k)
{
for(int i=2*k;i<2*k+1;i++)
swap(s[i],s[i+1]);
}
return s;
}
};
优化
字符串操作进阶! | LeetCode:541. 反转字符串II_哔哩哔哩_bilibili
因为是一次跳2k个,所以当string s个数为奇数个时,可能会出现跳越界的情况,例如 {1 2 3},所以我们要设置旋转的前提条件:
注意:
code
class Solution {
public:
string reverseStr(string s, int k) {
for(int i=0;i<s.size();i+=(2*k))
{
if(i+k<=s.size())
{
reverse(s.begin()+i,s.begin()+i+k);
continue;
}
reverse(s.begin()+i,s.begin()+s.size());
}
return s;
}
};