力扣題
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
給定一個字符串 s ,請你找出其中不含有重復(fù)字符的 最長子串 的長度。
示例 1:
輸入: s = "abcabcbb"
輸出: 3
解釋: 因為無重復(fù)字符的最長子串是 "abc",所以其長度為 3。
示例 2:
輸入: s = "bbbbb"
輸出: 1
解釋: 因為無重復(fù)字符的最長子串是 "b",所以其長度為 1。
示例 3:
輸入: s = "pwwkew"
輸出: 3
解釋: 因為無重復(fù)字符的最長子串是 "wke",所以其長度為 3。
請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串。
Go實現(xiàn)
func lengthOfLongestSubstring(s string) int {
lastOccurred := make(map[rune]int)
start := 0
maxLength := 0
for i, ch := range []rune(s){
// 判斷KEY是否存在
if lastI,ok := lastOccurred[ch]; ok && lastI >= start{
start = lastI + 1
}
if lastOccurred[ch] >= start{
start = lastOccurred[ch] + 1
}
if i - start + 1 > maxLength{
maxLength = i - start + 1
}
lastOccurred[ch] = i
}
return maxLength
}