package top100liked import "testing" // https://leetcode.cn/problems/longest-substring-without-repeating-characters/?envType=study-plan-v2&envId=top-100-liked // func lengthOfLongestSubstring(s string) int { // if len(s) == 0 { // return 0 // } // if len(s) == 1 { // return 1 // } // maxLen := 0 // l, r := 0, 1 // maps := make(map[byte]bool) // maps[s[l]] = true // for r < len(s) { // if !maps[s[r]] { // // 字符不存在于子串 // maps[s[r]] = true // } else { // // 字符存在于字串 // // 从子串依次剔除左侧字符直到与 s[r] 相同的字符 // for l < r && s[l] != s[r] { // maps[s[l]] = false // l++ // } // l++ // } // r++ // maxLen = max(maxLen, r-l) // } // return maxLen // } func lengthOfLongestSubstring(s string) int { charIdx := make(map[byte]int) maxLen, left := 0, 0 slen := len(s) for right := range slen { ch := s[right] if idx, ok := charIdx[ch]; ok && idx >= left { left = idx + 1 // 直接跳到重复字符的下一个 } charIdx[ch] = right maxLen = max(maxLen, right-left+1) } return maxLen } func TestS8(t *testing.T) { println(lengthOfLongestSubstring("abcabcbb")) println(lengthOfLongestSubstring("bbbbb")) println(lengthOfLongestSubstring("pwwkew")) }