美文网首页
03.leetcode题目讲解(Python):无重复字符的最长

03.leetcode题目讲解(Python):无重复字符的最长

作者: 夏山闻汐 | 来源:发表于2018-06-20 16:27 被阅读205次

    题目:

    给定一个字符串,找出不含有重复字符的最长子串的长度。
    示例:
    给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。
    给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。
    给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串,"pwke" 是 子序列 而不是子串。

    采用Python的set,可以知道无重复子串的可能的最大长度,把可能的最大长度作为滑动窗口的初始大小,并在搜索中调节窗口大小直到找到最大无重复子串。参考代码如下:

    class Solution:
        def lengthOfLongestSubstring(self, s):
            """
            :type s: str
            :rtype: int
            """
    
            len_s = len(s)
            if len_s == 0:
                return 0
            set_s = set(s)
            # get the max_size of sild window
            max_len = len(set_s)
            max_sub_str = ""
            while max_len:
                if max_len == 1:
                    return 1
                i = 0
                while i + max_len <= len_s:
                    sub_s = s[i:i + max_len]
                    set_sub = set(sub_s)
                    # if there is no repeat in sub string
                    if len(set_sub) == len(sub_s):
                        max_sub_str = sub_s
                        return(len(list(max_sub_str)))
                    i = i + 1
                # adjust the size of window
                max_len = max_len - 1
    

    ps:如果您有好的建议,欢迎交流 :-D,也欢迎访问我的个人博客 苔原带:tundrazone.com

    相关文章

      网友评论

          本文标题:03.leetcode题目讲解(Python):无重复字符的最长

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