541. Reverse String II

xiaoxiao2021-02-28  52

Given a string and an integer k, you need to reverse the first k characters for every 2k characters counting from the start of the string. If there are less than k characters left, reverse all of them. If there are less than 2k but greater than or equal to k characters, then reverse the first k characters and left the other as original.

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; } };

转载请注明原文地址: https://www.6miu.com/read-2633137.html

最新回复(0)