给定一个字符串 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 };