美文网首页
无重复字符的最长子串

无重复字符的最长子串

作者: 3ni | 来源:发表于2018-10-03 09:02 被阅读0次

    给定一个字符串,找出不含有重复字符的最长子串的长度。

    示例 1:
    输入: "abcabcbb"
    输出: 3
    解释: 无重复字符的最长子串是 "abc",其长度为 3。

    示例 2:
    输入: "bbbbb"
    输出: 1
    解释: 无重复字符的最长子串是 "b",其长度为 1。

    示例 3:
    输入: "pwwkew"
    输出: 3
    解释: 无重复字符的最长子串是 "wke",其长度为 3。
    请注意,答案必须是一个子串,"pwke" 是一个子序列 而不是子串。

    class Solution(object):
        def lengthOfLongestSubstring(self, s):
            """
            :type s: str
            :rtype: int
            """
            d = {}
            n = 0
            m = 0
            i = 0
            length = len(s)
            while i < length:
                if n > m:
                    m = n
                if not d.has_key(s[i]):
                    n += 1
                    d[s[i]] = i
                    i += 1
                else:
                    i = d[s[i]] + 1
                    d = {}
                    n = 0
            if n > m:
                m = n
            return m
    

    思路:遍历字符串,每遇到一个字符就存储在字典中,并查看是否已经有相同的键,如果有表示有与之前的字符串中有重复的字符,存储当前无重复的字符串长度并存储起来并与之前的长度进行比较,然后将起点赋值为重复字符的后一位,并清空字典,然后继续遍历后面的字符串。当然可以用集合代替字典。

    相关文章

      网友评论

          本文标题:无重复字符的最长子串

          本文链接:https://www.haomeiwen.com/subject/gzinoftx.html