首页 > 编程语言 >算法练习-第八天【字符串】

算法练习-第八天【字符串】

时间:2022-09-30 00:11:45浏览次数:120  
标签:right 第八天 反转 len 344 算法 字符串 left

字符串

344.反转字符串

参考:代码随想录344.反转字符串

思考

题目要求在原地反转字符串,既然是原地反转那么可以第一时间想到双指针,一个指针指向头部,一个指向尾部,互换元素。

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

总结

很容易的一道题。

541.反转字符串 II

参考:代码随想录

思考

  1. 本题与344题不同是每2k个步长反转k个字符,既然是固定不长,那么可以使用for循环的时候变量每次增加2k。
  2. 接下来根据题意当要反转的字符数,因为步长是2k,那么只需要在步长内判断当前的i+k是否小于字符串长度即可,如果小于,则反转k个字符。
  3. 反转字符的操作在344题做过,可以直接拿来用。
func reverseStr(s string, k int) string {
	b := []byte(s)
	for i := 0; i < len(b); i += 2 * k {
		if i+k < len(b) {
			reverseString(b[i : i+k])
		} else {
			reverseString(b[i:])
		}
	}

	return string(b)
}

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

思考

当需要固定规律一段一段去处理字符串的时候,可以尝试使用for循环的表达式上来处理。

标签:right,第八天,反转,len,344,算法,字符串,left
From: https://www.cnblogs.com/neilliu/p/16743503.html

相关文章