列表

详情


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

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

上一题