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)