u
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
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"))
|
||||
}
|
||||
Reference in New Issue
Block a user