题目
给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串的长度。
示例
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
解析
这道题用滑动窗口法:这道题很难理解,看了好几遍
func find(s string) int {
window := [26]bool{}
left := 0
ans := 0
for right, c := range s {
for window[c-'a'] {
window[s[left]-'a'] = false
left++
}
window[c-'a'] = true
ans = max(ans, right-left+1)
}
return ans
}
func lengthOfLongestSubstring(s string) int {
ans := 0
window := [128]bool{} // 为了效率,滑动窗口用的数组
left := 0
for right, c := range s {
// 如果窗口已经包含了一个c元素,那么再加入一个就会重复,要先移除
for window[c] { // 窗口内有c,比如pwwabfw这种,在到第二个w的时候,要把前面的窗口的内容都删了
window[s[left]] = false
left++ // 缩小窗口
}
window[c] = true // 加入c
ans = max(ans, right-left+1) // 更新滑动窗口长度最大值
}
return ans
}