題目:spa
給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。指針
示例 1:code
輸入: "abcabcbb"
輸出: 3
解釋: 由於無重複字符的最長子串是 "abc",因此其長度爲 3。blog
示例 2:字符串
輸入: "bbbbb" 輸出: 1 解釋: 由於無重複字符的最長子串是 「b」,因此其長度爲 1。
解法:
採用哈希表法:設定左右雙指針l和r,遍歷字符串;
哈希表存儲某字符s[i]最新在字符串中出現的位置index + 1,key, value對應s[i], i;
左指針在遍歷過程當中:
若s[i]不在HashMap中,則跳過;
不然,l 指針設定爲 l 和 dic[s[r]] 的最大值,即修改以後,保證新字符串中沒有重複字符。
每次更新長度最大值resstring
1 class Solution: 2 def lengthOfLongestSubstring(self, s: str) -> int: 3 dic = {} 4 l, res = 0, 0 5 for r in range(len(s)): 6 if s[r] in dic: 7 l = max(dic[s[r]], l) 8 dic[s[r]] = r + 1 9 res = max(res, r - l + 1) 10 return res