leetcode题目:541. 反转字符串II
给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
思路
这道题目其实也是模拟,实现题目中规定的反转规则就可以了。
在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间。
那么这里具体反转的逻辑我们要不要使用库函数呢,其实用不用都可以,使用reverse来实现反转也没毛病,毕竟不是解题关键部分。
c++代码
class solution
{
public:
string reverseStr(string s, int k)
{
for (int i = 0; i < s.size(); i += (2 * k))
{//每隔2*k个字符的前k个进行翻转
if (i + k <= s.size())
{// 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
reverse(s.begin() + i, s.begin() + i + k);
continue;
}
//剩余字符小于k 个,则剩余字符全部翻转
reverse(s.begin() + i, s.end());
}
return s;
}
};