003_无重复字符的最长子串
知识点:滑动窗口
LeetCode第三题:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
实现语言:GoLang
// 滑动窗口, 优化版,减少left的移动次数
func lengthOfLongestSubstring(s string) int {
length := len(s)
window := map[uint8]int{}
max := 0
left, right := 0, 0
for right < length {
c := s[right]
// 关键一步:如果发现已经存在该字符,那么直接将新的left更新到这里,丢弃掉前一个相同字符的位置
if n, ok := window[c]; ok && n >= left {
left = n + 1
}
if right - left + 1 > max {
max = right - left + 1
}
window[c] = right
right++
}
if right - left > max {
max = right - left
}
return max
}
// 滑动窗口解法
func lengthOfLongestSubstring_(s string) int {
length := len(s)
window := map[uint8]int{}
max := 0
left, right := 0, 0
for right < length {
c := s[right]
window[c]++
for window[c] > 1 {
if right - left > max {
max = right - left
}
d := s[left]
window[d]--
left++
}
right++
}
if right - left > max {
max = right - left
}
return max
}