给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
func lengthOfLongestSubstring(s string) int {
// 记录map
strMap := make(map[byte]bool, 0)
// 当前的队列
line := make([]byte, 0)
vec := []byte(s)
max := 0
for i:= range vec {
line = append(line, vec[i])
// 元素在队列中,则从记录map和队列中清掉左边的元素
if _, ok := strMap[vec[i]]; ok {
j := 0
for j = range line {
delete(strMap, line[j])
if line[j] == vec[i] {
break
}
}
line = line[j + 1:]
}
strMap[vec[i]] = true
if len(line) > max {
max = len(line)
}
}
return max
}