zoukankan      html  css  js  c++  java
  • 找出不含重复字符的最长子串的长度

    题目

    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
    
  • 相关阅读:
    语文文法
    1223 递归下降语法分析程序设计
    有穷的自动机构造
    文法分析
    text
    0916 词法分析(3)
    "firstday"-软件工程
    实验四 递归下降语法分析程序设计
    构造该正规式的有穷状态自动机
    评论
  • 原文地址:https://www.cnblogs.com/new-start/p/11633320.html
Copyright © 2011-2022 走看看