LeetCode 3*. 無重複字符的最長子串(Python)

給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。

示例 1:

輸入: "abcabcbb"
輸出: 3 
解釋: 因爲無重複字符的最長子串是 "abc",所以其長度爲 3。

示例 2:

輸入: "bbbbb"
輸出: 1
解釋: 因爲無重複字符的最長子串是 "b",所以其長度爲 1。

示例 3:

輸入: "pwwkew"
輸出: 3
解釋: 因爲無重複字符的最長子串是 "wke",所以其長度爲 3。
     請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串。

思路:藉助兩個指針(head, tail) 來維護一個滑動窗口,再利用一個 dict 來保存每個字符的最新的角標。 利用 head 指針遍歷數組,每過一個字符,更新 dict 的key,發現相同字符時,計算 head 與 tail 指針的長度,記錄最大值。

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        max_len = 0
        head = 0
        tail = -1
        letters = dict()
        
        while head < len(s):
            if s[head] in letters.keys():    # 該字母已經出現過
                tail = max(tail,letters[s[head]]) # 不能以小於tail的位置來計算,因爲會有重複字母,例如:abba
            
            letters[s[head]] = head 
                
            if  head - tail > max_len:
                max_len = head - tail
            
            head = head + 1
        
            
        return max_len

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章