字符串
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
思考
- 本题与344题不同是每2k个步长反转k个字符,既然是固定不长,那么可以使用for循环的时候变量每次增加2k。
- 接下来根据题意当要反转的字符数,因为步长是2k,那么只需要在步长内判断当前的
i+k
是否小于字符串长度即可,如果小于,则反转k个字符。 - 反转字符的操作在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