python古典アルゴリズム問題:重複文字のない最長男列

1473 ワード

タイトル:重複文字のない長男列.
文字列を指定すると、重複文字が含まれていない長男の列の長さを見つけてください.
例1:
入力:“abcabcbb”出力:3解釈:重複文字のない最長男列は“abc”であるため、その長さは3である.例2:
入力:「bbbbb」出力:1解釈:重複文字のない長男列は「b」であるため、その長さは1である.例3:
入力:「pwwkew」出力:3解釈:重複文字のない長男列は「wke」であるため、その長さは3である.
あなたの答えはサブストリングの長さでなければなりません.「pwke」はサブストリングであり、サブストリングではありません.
解法1:一般的な考え方
class Count:
    def __init__(self):
        self.curLength = 0

    def compare(self, temp: str):
        lens = len(set(temp))
        if lens != len(temp):
            return False
        else:
            self.curLength = lens
            return True

    def circulation(self, s: str):
        flag = False
        length_s = len(s)  # 8
        temp = ""
        j = 0
        while j + self.curLength < length_s:  # 1+0<8
            temp = s[j:j + self.curLength + 1]  # temp = "a"
            if self.compare(temp):  # tem   
                continue
            else:
                j += 1
        return self.curLength

解法2:神仙の考え方(ネットで見た)
class Solution:
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        st = {}
        i, ans = 0, 0
        for j in range(len(s)):
            if s[j] in st:
                i = max(st[s[j]], i)
            ans = max(ans, j - i + 1)
            st[s[j]] = j + 1
        return ans

変換元:https://www.cnblogs.com/duanming/p/11830278.html