leetcode 無重複字元的最長子串 python實現

來源:互聯網
上載者:User

標籤:substr   col   複雜度   初始   說明   ring   string   color   pre   

 

這道題需要藉助雜湊尋找key的O(n) 時間複雜度, 否則就會逾時

   初始化一個 雜湊表\字典  dic

頭指標start 初始為0

當前指標 cur 初始為0

最大長度變數 l 初始為0

  用cur變數從給定字串str的開頭開始 一位一位的向右查看字元,直到整個字串遍曆完, 對每一位字元進行如下:

    當前位置的字元為 c = str[cur]

    查詢當前字元 c 是否 在雜湊表dic的鍵 當中,表示 當前字元c 是否之前遍曆到過

       如果 當前字元還沒出現過,就 在dic中記錄一個索引值對  (當前字元c,當前位置cur )

      cur 後移一位

       如果 當前字元出現過, 擷取 當前字串c 上次出現的位置 pre = dic[c]

      如果pre 在 start後面即 pre>start, 則把start 移動到 pre的下一位, start = pre + 1, 這樣保證cur繼續向後遍曆中 從start到cur沒有重複元素

      否則 start不動,start移動到某一個位置,說明在這個位置之前有重複的元素了,所以start只往後移動不往回移動

    這時候在衡量一下  如果 cur - start + 1 (衡量當前沒重複子串開頭到結尾的長度) 比 長度變數 l 大, 那就替換 l 為  cur - start + 1

      

    

 

 1 class Solution: 2     def lengthOfLongestSubstring(self, s): 3         """ 4         :type s: str 5         :rtype: int 6         """ 7         l = 0 8         start = 0 9         dic = {}10         for i in range(len(s)):11             cur = s[i]12             if cur not in dic.keys():13                 dic[cur] = i14             else:15                 if dic[cur] + 1 > start:16                     start = dic[cur] + 117                 dic[cur] = i18             if i - start + 1 > l:19                 l = i - start + 120 21         return l22 23 24 if __name__ == ‘__main__‘:25     s = Solution()26     # print(s.lengthOfLongestSubstring("abcabcbb"))27     # print(s.lengthOfLongestSubstring("abba"))28     print(s.lengthOfLongestSubstring("aabaab!bb"))29     # print(s.lengthOfLongestSubstring("bbbbb"))

 

leetcode 無重複字元的最長子串 python實現

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.