剑指Offer 48. 最长不含重复字符的子字符串

发布时间 2023-09-08 10:03:28作者: 小星code

题目链接: 剑指Offer 48. 最长不含重复字符的子字符串

题目描述:

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。

解法思路:

代码:

func lengthOfLongestSubstring(s string) int {
    var res int
    if s == ""{
        return res
    }
    //双指针算法,j指针从前往后移动,表示以j为结尾的子串,
    //i 也从前往后移动
    n := len(s)
    m := make(map[byte]int,n)
    for i,j:=0,0;j < n;j++{
        m[s[j]]++
        if m[s[j]] > 1 {  //说明当前字符前面出现过,因此要找到前面出现的位置,
            for m[s[i]] == 1{ //对于前面只出现一次的字符,跳过
                m[s[i]]-- 
                i++
            }
            //for循环结束后,此时 i 指针指向的就是上面重复的字符
            m[s[i]]--  //出现数量减 1
            i++  //i 向后移动一位
        }
        res = max(res,j-i+1)
    }
    return res
}
func max(a,b int)int{
    if a > b {
        return a
    }
    return b
}