码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode:[3]最长不含重复字符子串

时间:2019-04-19 16:14:51      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:重复   length   return   sci   计算   def   不用   cab   substr   

  • Input: "abcabcbb"
    Output: 3
    Explanation: The answer is "abc", with the length of 3.

  • Input: "bbbbb"
    Output: 1
    Explanation: The answer is "b", with the length of 1.

  • Input: "pwwkew"
    Output: 3
    Explanation: The answer is "wke", with the length of 3.
    Note that the answer must be a substring, "pwke" is a subsequence and not a substring.
  • class Solution:
        def lengthOfLongestSubstring(self, s):
            """
            遍历所有字符,通过更新每个字符出现的位置,并调整起点位置,计算得到当前子串的长度。
            :type s: str
            :rtype: int
            """
            # 这里我们只考虑ascii码表中的前256个字符,如果输入是超过这个范围的则需要扩大list长度
            # 或者使用字典
            char_pos = [-1] * 256
            # 将start标记为当前子串起点前1位。例如当前子串的下表是0-3,则start置为-1,这样在后面
            # 计算长度的时候就不用+1,因为start标记的是前一位
            start = -1
            maxlen = 0
            # 对每一个字符来说,如果上一次出现的下标比当前子串的起点要大,也就是说这个字符上一次出现
            # 的地方是在start之后,而这一次又出现了,说明在[start+1, i]这一段出现了2个相同字符。
            # 那么我们需要将start移动到当前字符上一次出现的位置才能确保当前字符的这一次出现是新子串
            # 中的第一次出现。
            # 对于每一个出现的字符,记录最新出现的下标。
            for i, c in enumerate(s):
                if char_pos[ord(c)] > start:
                    start = char_pos[ord(c)]
    
                char_pos[ord(c)] = i
                maxlen = max(maxlen, i - start)
    
            return maxlen
    

    leetcode:[3]最长不含重复字符子串

    标签:重复   length   return   sci   计算   def   不用   cab   substr   

    原文地址:https://blog.51cto.com/jayce1111/2381423

    (0)
    (0)
       
    举报
    评论 一句话评论(0
    登录后才能评论!
    © 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
    迷上了代码!