【字符串算法题】541. 反转字符串 II
题目链接
思考
- 把字符串以2k的步长分成
count_reverse
个子区间。 - 考虑最后一个子区间的字符数量:1)如果大于等于k,则它要和前面的子区间一样,要对区间内的前k个字符进行反转;2)如果小于k,则它的所有字符都要进行反转。
cpp代码
class Solution {
public:
string reverseStr(string s, int k) {
int count_reverse = s.size() / (2*k); // 以2k为步长计算字符串子区间
// 如果最后一个子区间字符大于等于k个,则它也算在要进行前k个字符反转的子区间集合内
if(s.size() % (2*k) >= k) count_reverse++;
int r_index = 0; // 每个子区间进行反转的开头index
for(int i = 0; i < count_reverse; i++){ // 对每个子区间前k个字符进行反转
reverse(s.begin() + r_index, s.begin() + r_index + k);
r_index += (2*k);
}
// 如果最后一个子区间字符小于k个,则它的所有字符都要反转
if(s.size() % (2*k) < k)
reverse(s.begin() + r_index, s.end());
return s;
}
};