题目链接

题目描述

给定一个字符串 s 和一个整数 k,从字符串开头算起,每 2k 个字符反转前 k 个字符。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

    示例

    示例1:

    输入:s = “abcdefg”, k = 2 输出:“bacdfeg”

提示

  • 1 <= s.length <= 10
  • s 仅由小写英文组成
  • 1 <= k <= 10

    思路

    模拟

    从头模拟即可,注意临界判断。

    题解

    1. class Solution {
    2. public:
    3. string reverseStr(string s, int k) {
    4. for (int i = 0; i < s.size(); i += (2 * k)) {
    5. reverse(s.begin() + i, s.begin() + min(i + k, (int)s.size()));
    6. }
    7. return s;
    8. }
    9. };

    复杂度分析

  • 时间复杂度:0541-反转字符串II - 图1

  • 空间复杂度:0541-反转字符串II - 图2