给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
本题是在还没学数据结构算法时候写的。
class Solution:
def lengthOfLongestSubstring(self, s):
l = len(set(s))
if l == 0 or l == 1 or l == 2 or l==len(s):
return l
else:
ll = 0
t = 0
for i in range(1, len(s)):
if t == 0:
if set(s[:i]) == set(s[:i+1]):
ll = i
t = s.index(s[i]) + 1
if i == len(s) - 1 or ll==l:
if ll==l:
return ll
else:
return len(s) - 1
else:
ss = s[t:]
if set(ss[:i-t]) == set(ss[:i-t+1]):
if ll <= len(set(ss[:i-t+1])):
ll = len(set(ss[:i-t+1]))
t = ss.index(s[i]) + t + 1
if ll == l or i == (len(s) - 1):
if i == len(s) - 1:
if set(ss[:i-t]) == set(ss[:i-t+1]):
return len(ss)-1
return ll
if i == len(s) - 1:
if len(ss) > ll:
return len(ss)
return ll