essay

hot100-无重复字符的最大字串

#算法

hot100——无重复字符的最大字串

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

示例 1:

输入: s = "abcabcbb"

输出: 3

解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。注意 "bca" 和 "cab" 也是正确答案。

示例 2:

输入: s = "bbbbb"

输出: 1

解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: s = "pwwkew"

输出: 3

解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。

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

提示:

0 <= s.length <= 5 * 104

s 由英文字母、数字、符号和空格组成

func lengthOfLongestSubstring(s string) int {
    //使用map存储遍历后的字符
    sMap := make(map[byte]int)
    //滑动窗口左边
    left := 0
    result := 0
    for right := 0; right < len(s); right++ {
        c := s[right]
        //在map里遇到重复的字符,且当前重复字符在滑动窗口内(i>=left)
        if i, ok := sMap[c]; ok && i >= left {
           // 立刻改变滑动窗口的左边界
           left = sMap[c] + 1
        }
        //没遇到重复的字符直接放入map中(拓宽右边界),存的是下标;重复的话更新左边界
        sMap[c] = right
        // 计算当前窗口 [left, right] 的长度,并更新最大长度
        result = max(result, right-left+1)
    }
    return result
}
comments如果有不同意见或者补充,直接留在这里。
contact

在别处继续找到我

如果你想聊技术、设计,或者只是打个招呼。

暂未配置外部链接