03.leetcodeテーマ解説(Python):重複文字のない長男列

1292 ワード

タイトル:
文字列を指定して、重複文字を含まない最長子列の長さを見つけます.例:「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