题目

leetcode344f反转字符串

题解与分析

字符串反转,传入函数的是一个字符数组,要求在原来空间进行更改,并且不能重新申请额外空间。
使用双指针法, 两指针对向行走,交换数值
至于是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--
    }
}
分类: 算法

站点统计

  • 文章总数:309 篇
  • 分类总数:19 个
  • 标签总数:190 个
  • 运行天数:975 天
  • 访问总数:72672 人次

浙公网安备33011302000604

辽ICP备20003309号