精进之路  

题目

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

分析

任意2个重复的字符不可能同时存在于一个合法的子串中。因此,可以从左到右扫描字符,用一个字典记录出现过的字符。
一旦发现出现过的字符,则切分为不同的子串。
跟踪子串的最大长度即可。

时间复杂度为 O(n)

代码

# 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
posted on 2019-10-08 02:24  Optimus_Prime  阅读(397)  评论(0编辑  收藏  举报