找出不含重複字符的最長子串的長度

題目

Given a string, find the length of the longest substring without repeating characters.code

分析

任意2個重複的字符不可能同時存在於一個合法的子串中。所以,能夠從左到右掃描字符,用一個字典記錄出現過的字符。
一旦發現出現過的字符,則切分爲不一樣的子串。
跟蹤子串的最大長度便可。utf-8

時間複雜度爲 O(n)string

代碼

# coding: utf-8
class Solution:
  def lengthOfLongestSubstring(self, s):
    maxL = 0
    L = 0
    D = {}

    # 從第一個字符開始掃描一遍,同時記錄子串長度。若是遇到字符在現有子串裏已存在的,則馬上終止當前子串,開始一個新子串的計數
    for c in s:
        if c not in D:
            D[c] = 1
            L += 1
        else:
            if L > maxL:
                maxL = L
            D = { c: 1 }
            L = 1
    if L > maxL:
        maxL = L
    
    return maxL


print Solution().lengthOfLongestSubstring('abrkaabcdefghijjxxx')
# 10
相關文章
相關標籤/搜索