541.反转字符串 II

56 阅读1分钟

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

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
    算法:
    方法一:模拟
func reverseStr(s string, k int) string {
	arr := []byte(s)
	start := 0
	flag := 1
	for i := 0; i < len(s); i ++ {
		if i != 0 && i % k == 0 {
			if flag == 1 {
				revert(arr, i - k, i - 1)

			}
			flag = -1 * flag
			if flag == 1 {
				start = i
			}
		}
	}
	if flag == 1 {
		revert(arr, start, start + k - 1)
	}
	return string(arr)
}

func revert(arr []byte, start, end int) {
	if end >= len(arr) {
		end = len(arr) - 1
	}
	for start < end {
		arr[start], arr[end] = arr[end], arr[start]
		start ++
		end --
	}
	fmt.Println(string(arr))
}