当前位置: 移动技术网 > IT编程>脚本编程>Go语言 > QA:无重复字符的最长子串

QA:无重复字符的最长子串

2019年11月10日  | 移动技术网IT编程  | 我要评论
无重复字符的最长字串 leetcode地址:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ 题目描述: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例: 输入: ...

无重复字符的最长字串

leetcode地址:

题目描述:

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例:

输入: "abcabcbb"
输出: 3 

解决思路:

使用map  lastoccured[byte]int 记录字符和字符最后出现的下标

对于字符串每个字符x:

1.lastoccured[x]不存在 或者 小于start时不做操作。

2.lastoccured[x]>=start 时,start = lastoccured[x]+1。

3.每次都要更新lastoccured[x],更新最大长度maxlength。

 

代码如下:

func lengthoflongestsubstring(s string) int {
    lastoccured := make(map[byte]int)
    start := 0
    maxlength := 0
    for i, ch := range []byte(s){
        if num, ok := lastoccured[ch]; ok&& num >= start{
            start = num + 1
        }
        if i-start+1 > maxlength{
            maxlength = i-start+1
        }
        lastoccured[ch] = i
    }
    return maxlength
}

 

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网