python經典算法題:無重複字符的最長子串

題目:無重複字符的最長子串。

給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。python

示例 1:web

輸入: 「abcabcbb」
輸出: 3
解釋: 由於無重複字符的最長子串是 「abc」,因此其長度爲 3。
示例 2:svg

輸入: 「bbbbb」
輸出: 1
解釋: 由於無重複字符的最長子串是 「b」,因此其長度爲 1。
示例 3:ui

輸入: 「pwwkew」
輸出: 3
解釋: 由於無重複字符的最長子串是 「wke」,因此其長度爲 3。
請注意,你的答案必須是 子串 的長度,「pwke」 是一個子序列,不是子串。spa

解法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
相關文章
相關標籤/搜索