題面
請從字串中找出一個最長的不包含重複字元的子字串,計算該最長子字串的長度。
示例
輸入: "pwwkew"
輸出: 3
解釋: 因為無重複字元的最長子串是 “wke”,所以其長度為 3。
請注意,你的答案必須是 子串 的長度,”pwke” 是一個子序列,不是子串。
來源:力扣(LeetCode)
連結:leetcode-cn.com/problems/zui-chang...
分析
- 滑動視窗
- 雙指標
- 雜湊對映
上碼
- 雜湊檢測到是否有相同值
- 無重複值,當前字元收錄入雜湊,右指標擴張
- 有則,右指標等待擴大邊界,左指增長,同時雜湊收縮
- 重複直到同值左側耗盡,一輪迴圈時記錄最大長度,本質 字典模擬雙端佇列
func lengthOfLongestSubstring(s string) int {
maxLen := 0
m := make(map[byte]struct{},0)
for left,right := 0,0; right < len(s); {
if _,ok := m[s[right]];ok {
delete(m, s[left])
left++
}else{
m[s[right]] = struct{}{}
right++
}
if right - left > maxLen {
maxLen = right - left
}
}
return maxLen
}
小結
迴圈體內自增,可讓邊界在迴圈體內參與計算,合理避免越界
同佇列,棧一樣,雜湊變數動態擴張與收縮,可作為臨時輔助工具參與
本作品採用《CC 協議》,轉載必須註明作者和本文連結