列表

详情


541. 反转字符串 II

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

 

示例 1:

输入:s = "abcdefg", k = 2
输出:"bacdfeg"

示例 2:

输入:s = "abcd", k = 2
输出:"bacd"

 

提示:

相似题目

反转字符串

反转字符串中的单词 III

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: string reverseStr(string s, int k) { } };

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

上一题