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
原站题解
java 解法, 执行用时: 0 ms, 内存消耗: 42.7 MB, 提交时间: 2025-01-31 08:59:54
class Solution { public String reverseStr(String s, int k) { int n = s.length(); char[] arr = s.toCharArray(); for (int i = 0; i < n; i += 2 * k) { reverse(arr, i, Math.min(i + k, n) - 1); } return new String(arr); } public void reverse(char[] arr, int left, int right) { while (left < right) { char temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; left++; right--; } } }
rust 解法, 执行用时: 0 ms, 内存消耗: 2.3 MB, 提交时间: 2025-01-31 08:59:40
impl Solution { pub fn reverse_str(s: String, k: i32) -> String { let mut chars: Vec<char> = s.chars().collect(); let n = chars.len(); for i in (0..n).step_by((2 * k) as usize) { let end = std::cmp::min(i + k as usize, n); chars[i..end].reverse(); } chars.into_iter().collect() } }
javascript 解法, 执行用时: 5 ms, 内存消耗: 51.4 MB, 提交时间: 2025-01-31 08:59:24
/** * @param {string} s * @param {number} k * @return {string} */ var reverseStr = function(s, k) { const n = s.length; const arr = Array.from(s); for (let i = 0; i < n; i += 2 * k) { reverse(arr, i, Math.min(i + k, n) - 1); } return arr.join(''); }; const reverse = (arr, left, right) => { while (left < right) { const temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; left++; right--; } }
cpp 解法, 执行用时: 0 ms, 内存消耗: 9.3 MB, 提交时间: 2025-01-31 08:58:53
class Solution { public: string reverseStr(string s, int k) { int n = s.length(); for (int i = 0; i < n; i += 2 * k) { reverse(s.begin() + i, s.begin() + min(i + k, n)); } return s; } };
python3 解法, 执行用时: 0 ms, 内存消耗: 17.6 MB, 提交时间: 2025-01-31 08:58:40
class Solution: def reverseStr(self, s: str, k: int) -> str: t = list(s) for i in range(0, len(t), 2 * k): t[i: i + k] = reversed(t[i: i + k]) return "".join(t)
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) }