Skip to content

Latest commit

 

History

History
68 lines (51 loc) · 1.53 KB

541-反转字符串II.md

File metadata and controls

68 lines (51 loc) · 1.53 KB

541. 反转字符串 II

leecode原题

题目

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

解题思路

思路

该题是344-反转字符串升级版,只需要在其基础上按逻辑判断,然后每个部分数组进行反转即可。

实现

源码

func reverseStr(s string, k int) string {
	b := []byte(s)

	end := len(b)

	for start := 0; start < end; start += 2 * k {
		sub := end - start
		//如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样
		if sub >= k {
			reverse_part(b, start, start+k-1)
		} else {
			//如果剩余字符少于 k 个,则将剩余字符全部反转。
			reverse_part(b, start, start+sub-1)
		}
	}
	return string(b)
}

// 反转指定部分的数组元素
func reverse_part(b []byte, start, end int) {
	for start < end {
		b[start], b[end] = b[end], b[start]
		start++
		end--
	}
}