美文网首页
leetCode题3-无重复字符的最长子串

leetCode题3-无重复字符的最长子串

作者: GoSnail | 来源:发表于2020-09-05 23:15 被阅读0次

    给定一个字符串,请你找出启宗不含邮重复字符的最长字串的长度。

    示例1:

    输入:“abcacbbb”

    输出:3

    解释:因为无重复字符的最长字串是“abc",所以其长度为3.

    示例2:

    输入:“bbbbbb”

    输出:1

    解释:因为无重复字符的最长字串是“b”,所以其长度为1.

    示例3:

    输入:“pwwkew”

    输出:3

    解释:因为无重复字符的长度最长字串为“wke”,所以其长度为3.

    请注意,你的答案必须是子串的长度,“pwke”是一个子序列,不是子串

    絮叨一下:起初看这题没有看明白,什么是无重复字符的最长字串,看了第一个示例,我把该题理解扭曲了,以为是之前做过的在一个字符串中查找一个子串,这个子串在字符串中可重复出现,且该子串的最长长度是多少。这么理解,第一个示例完全符合,但是看完第二个示例和第三个示例,完全懵逼。。。。

    后来琢磨了半天,才恍然大悟,是找一个子串,该子串中不出现重复的字符,找到长度最长的子串,然后返回该子串的长度。其实该题如果理解了他的本意,相对比较简单,至少比我误解的题要简单很多(后面是不是leetcode可以把我误解的题引入到题库里面啊,😄)

    下面说下解题思路:

    1、从字符串的头部开始,遍历字符串,让出现重复的字符时停止遍历,记录当前子串的长度。

    2、在当前的子串中找到与当前遍历的字符重复的字符的位置,标记为i,然后新的遍历从i+1开始,继续遍历字符串

    3、重读动作,每次记录子串的长度,每次产生新的子串后,求该子串的长度与上次一比较,如果小于则不做处理,如果大于则替换该数字。

    4、遍历结束后,返回上面存储的数字,即为结果

    下面附上代码:

    func LeetCode3(sstring)int {

        var max =0

           var tmp string

           for _, v :=range s {

                if n :=strings.Index(tmp, string(v)); n != -1 {//在子串中找到了该字符。需要重新开始

                   if max < len(tmp) {

                        max =len(tmp)

                   }

                //将tmp的0-n的字符擦除

                 tmp = tmp[n+1:]

            }

            tmp +=string(v)

        }

        return max

    }

    相关文章

      网友评论

          本文标题:leetCode题3-无重复字符的最长子串

          本文链接:https://www.haomeiwen.com/subject/bkhqektx.html