美文网首页
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