题目描述:
给定一个字符串 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:
string reverseStr(string s, int k) {
int l = s.length();
string a = "";
for(int i=0;i<l;i++){
if(i%(2*k)==0){ //遇到整除的地方
string s1=s.substr(i,k); //截取要反转的k个字符
reverse(s1.begin(),s1.end()); //反转
a=a+s1;//记录到结果中
if(i+k<l){ //如果该段反转字符的后面还有不反转的字符
string s2=s.substr(i+k,k); //截取不反转的部分
a=a+s2; //记录到结果中
}
}
}
return a;
}
};
用一个新的字符串记录结果,每次处理完一段就记录一段,不在原string上修改,免去麻烦。注意下标的+1/-1。