541. 反转字符串II

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

如果剩余字符少于 k 个,则将剩余字符全部反转。

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

示例:

输入: s = "abcdefg", k = 2
输出: "bacdfeg"

 

复制代码
 1 class Solution {
 2 public:
 3     string reverseStr(string s, int k) {
 4         int len = s.length();
 5         if (!len) return s;
 6         int n = len / k;
 7         int num = len / (2 * k);
 8         int last = len - len % (2 * k);
 9         vector<int> vec;
10         int index = 0;
11         vec.push_back(last);
12         //保存要处理的下标
13         for (int i = 0; i < num; i++)
14         {
15             vec.push_back(index);
16             index = index + 2 * k;
17             if (index == last)
18             {
19                 break;
20             }
21         }
22         //反转下标对应的string
23         for (const auto p : vec)
24         {
25             int left = p;
26             int right = left + k - 1;
27             if (right > len - 1) right = len - 1;
28             char cur;
29             while (left < right)
30             {
31                 cur = s[left];
32                 s[left] = s[right];
33                 s[right] = cur;
34                 left++;
35                 right--;
36             }
37         }
38         return s;
39     }
40 };
复制代码

 

 

 

posted @   xiazichengxi  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示
主题色彩