class Solution {
public:
string reverseStr(string s, int k) {
}
};
541. 反转字符串 II
给定一个字符串 s
和一个整数 k
,从字符串开头算起,每计数至 2k
个字符,就反转这 2k
字符中的前 k
个字符。
k
个,则将剩余字符全部反转。2k
但大于或等于 k
个,则反转前 k
个字符,其余字符保持原样。
示例 1:
输入:s = "abcdefg", k = 2 输出:"bacdfeg"
示例 2:
输入:s = "abcd", k = 2 输出:"bacd"
提示:
1 <= s.length <= 104
s
仅由小写英文组成1 <= k <= 104
原站题解
golang 解法, 执行用时: 0 ms, 内存消耗: 3.4 MB, 提交时间: 2021-06-17 16:41:11
func reverseStr(s string, k int) string { n := len(s) b := []byte(s) for start := 0; start < n; start += 2 * k { i, j := start, min(start+k-1, n-1) for i < j { b[i], b[j] = s[j], s[i] i++ j-- } } return string(b) } func min(x, y int) int { if x > y { return y } return x }
golang 解法, 执行用时: 0 ms, 内存消耗: 5.1 MB, 提交时间: 2021-06-17 16:28:53
func reverseStr(s string, k int) string { n := len(s) if n == 0 { return s } if n % (2*k) != 0 { s += strings.Repeat(" ", 2*k - (n%(2*k))) } left, mid, right := 0, k, 2*k res := "" for right <= len(s) { res += strings.TrimSpace(reverse(s[left:mid])) + strings.TrimSpace(s[mid:right]) left, mid, right = left + 2*k, mid + 2*k, right + 2*k } return res } func reverse(s string) string { b := []byte(s) n := len(s) for i := 0; i < n/2; i++ { b[i], b[n-1-i] = b[n-1-i], b[i] } return string(b) }