Skip to content

Latest commit

 

History

History
62 lines (53 loc) · 1.4 KB

541.反转字符串II.md

File metadata and controls

62 lines (53 loc) · 1.4 KB

题目描述

给定一个字符串 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

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/reverse-string-ii

解题思路

  • 判断[当前索引位置, 当前索引位置+k]是否在字符串范围内
    • 如果在,仅翻转前k个
    • 如果不在,全部翻转
  • 提供一个字符串的翻转函数

代码如下

func reverseStr(s string, k int) string {
    ss := []byte(s)
    for curIndex:=0; curIndex<len(s); curIndex+=2*k {
        if curIndex+k < len(s) {
            reverse(ss[curIndex:curIndex+k])
        } else {
            reverse(ss[curIndex:len(s)])
        }
    }

    return string(ss)
}

func reverse(ss []byte) {
    left, right := 0, len(ss)-1
    for left < right {
        ss[left], ss[right] = ss[right], ss[left]
        left++
        right--
    }
}