https://leetcode.cn/problems/reverse-string-ii/description/

<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;
}