package
0.0.0-20230809123828-b071cee2968a
Repository: https://github.com/codehanhan/leetcode-go.git
Documentation: pkg.go.dev
# README
无重复字符的最长子串
1. 题目描述
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
2. 示例
示例1
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例2
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例3
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
示例4
输入: s = ""
输出: 0
提示
- $0 <= s.length <= 5 * 10^4$
- s 由英文字母、数字、符号和空格组成
3. 解题
使用辅助哈希表:map[byte]int, 其key为字符,value为字符所在位置下标,对于重复的字符,只存储其最大的下标。
设最大无重复子串长度为max, 则算法如下:
如果len(s) <= 0, 则直接返回0, 否则:
初始化最大长度maxLen = 1
,开始下标start = 0
,对字符串从下标1进行遍历,对遇到的字符进行如下操作:
- 从哈希表中尝试取当前字符s[i]对应的下标index
- 若未取到, 或取到的值小于start,则
maxLen++
, 若有max<maxLen
, 则更新max - 若取到的值大于等于start, 则
start=index+1
,maxLen=i-start+1
- 若未取到, 或取到的值小于start,则
- 更新哈希表
待全部遍历完成后,返回max