3. 无重复字符的最长子串

2019-03-21  本文已影响0人  嫌疑人zx

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

执行用时:1008 ms

class Solution:
    
    def lengthOfSubString(self, s: str) -> int:
        for i in range(len(s),0,-1):
            for j in range(0, len(s)-i+1):
                change = s[j:i+j]
                for k in range(0,len(change)):
                    if change.count(change[k]) > 1:
                        break
                    elif k == len(change)-1:
                        return len(change)
        return len(s)
    
    def lengthOfLongestSubstring(self, s: str) -> int:
        
        maxChar = ' '
        maxCharNum = 0
        
        if len(s) > 20:
            charSet = set()
            for char in s :
                charSet.add(char)
                
            for char in charSet:
                num = s.count(char)
                maxChar = char if num>maxCharNum else maxChar
                maxCharNum = num if num>maxCharNum else maxCharNum
        
            newStr = s.replace(maxChar, '@--@'+maxChar)
            Arr = newStr.split('@--@')
            
            StrSet = set()
            for str in Arr:
                StrSet.add(str)
            
            if len(Arr) != len(StrSet):
                newStr = ""
                for str in Arr:
                    if str in StrSet:
                        newStr = newStr + str
                        if(len(str) > 1):
                            StrSet.remove(str)
                return self.lengthOfSubString(newStr)
            
        return self.lengthOfSubString(s)
上一篇下一篇

猜你喜欢

热点阅读