问题:
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度
实例:
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
代码:
方法一:枚举法
str = input()
count =0
for i in range(len(str)):
for j in range(i+1,len(str)):
if str[j] in str[i:j]:
count = max(count,j-i)
break
print(count)
方法二:使用字典
str = input()
dict = {}
k = - 1
res = 0
for i,j in enumerate(str):
if j in dict and dict[j] > k:
k = dict[j]
dict[j] = i
else:
dict[j] = i
res = max(res,i-k)
print(res)
方法三:动态规划
def find(str,num):
s = str[num]
j = num - 1
while j >= 0 and str[j] not in s:
s += str[j]
j -= 1
return len(s)
str = input()
length = 0
for i in range(len(str)):
length = max(find(str,i),length)
print(length)