题目
题解与分析
字符串反转,传入函数的是一个字符数组,要求在原来空间进行更改,并且不能重新申请额外空间。
使用双指针法, 两指针对向行走,交换数值
至于是left<right还是left<=right,都可以,只是=的情况明明中间数值的时候可以直接提上裤子走人,但还是礼貌的交换了一下数值。
可以在一开始的时候检测数组的长度,如果小于2,数组就一个元素,就不用往下走了,
func reverseString(s []byte) {
if len(s)<2{
return
}
left, right := 0, len(s)-1
for left<right{
// bak := s[right]
// s[right] = s[left]
// s[left] = bak
s[left], s[right] = s[right], s[left]
left++
right--
}
}
题目
leetcode:541字符串反转2
这道题反转出✿了,一道阅读理解题
题解与分析
这是一道模拟题
,既然是每2k个字符,就要在for上下文章,
题目里有一点没有表述清楚,就是哪怕字符串长度没有2k长,也要反转,这个情况在第40个用例里面出现了,
func reverseStr(ss string, k int) string {
s := []byte(ss)
length := len(s)
if length<2{
return string(s)
}
for i:=0;i<length; i+=2*k{
// 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样
if i+k<=length{
reverse(s[i:i+k])
}else{
// 如果剩余字符少于 k 个,则将剩余字符全部反转。
reverse(s[i:length])
}
}
return string(s)
}
func reverse(s []byte){
left := 0
right := len(s) - 1
for left<right{
s[left], s[right] = s[right], s[left]
left++
right--
}
}