<aside> 💡
按照题目规则按部就班写问题不大,主要熟悉reverse库函数的使用:
不使用reverse的写法
string reverseStr(string s, int k) {
int right;
int i = 0;
// 处理能凑出k个元素的部分
for (; i + k <= s.size(); i += 2 * k) {
right = i + k - 1;
for (int left = i; left < right; ++left, --right)
std::swap(s[left], s[right]);
}
// 处理不能凑出k个元素的部分
if (i + k > s.size()) {
right = s.size() - 1;
for (int left = i; left < right; ++left, --right)
std::swap(s[left], s[right]);
}
return s;
}
使用reverse的写法
string reverseStr(string s, int k) {
int sz = s.size() - 1;
for (int i = 0; i <= sz; i += 2 * k) {
if (sz - i >= k) {
std::reverse(s.begin() + i, s.begin() + i + k);
} else {
std::reverse(s.begin() + i, s.end());
}
}
return s;
}