Example:
Input: s = "abcdefg", k = 2 Output: "bacdfeg" Restrictions: The string consists of lower English letters only.Length of the given string and k will in the range [1, 10000]每2k个字符reverse前k个,不足k就都reverse,大于k小于2k reverse前k个。
1 遍历数组,看当前的下标如果是2k的倍数就设置start = i,end = i+k
2如果end>string长度,就reverse [start, len - 1],不然就reverse[start, end - 1]
3需要自己写一个reverse函数这样可以直接在string一段一段地reverse。
4处理corner case,len<=1时直接return s
代码如下:
class Solution { public: void reverse(string &s, int start, int end) { char c; while (start < end) { c = s[start]; s[start] = s[end]; s[end] = c; start++; end--; } } string reverseStr(string s, int k) { int len = s.size(); if (len <= 1) return s; int start, end; for (int i = 0; i < len; i++) { if (i % (2*k) == 0) { start = i; end = i + k; if (end > len) { reverse(s, start, len - 1); } else reverse(s, start, end - 1); } } return s; } };