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 @ 2023-03-09 18:19  xiazichengxi  阅读(50)  评论(0)    收藏  举报