给定一个字符串,请你找出其中不含有重复字符的 **最长子串 **的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串的长度,"wke" 是一个子序列,不是子串长度。
方法一:
def maxSizeSubstring(s):
res,cur,dic = 0,0,{}
for idx in range(len(s)):
if s[idx] in dic:
cur = max(cur, dic[s[idx]] + 1)
dic[s[idx]] = idx
res = max(res, idx - cur + 1)
return res
sample = "abcabcbb","bbbbb","pwwkew","I am HannYang."
for s in sample:
print(maxSizeSubstring(s))
方法二:
def maxSizeSubstring2(s):
res = 0
for i in range(len(s)):
for j in range(len(s),0,-1):
if i>=j: continue
t = s[i:j]
size = len(t)
if size==len(set(t)):
if size>res:
res = size
return res
sample = "abcabcbb","bbbbb","pwwkew","I am HannYang."
for s in sample:
print(maxSizeSubstring2(s))
方法三:
Max = lambda s: max([len(s[i:j]) for i in range(len(s)) for j in range(i+1,len(s)+1) if len(s[i:j])==len(set(s[i:j]))])
sample = "abcabcbb","bbbbb","pwwkew","I am HannYang."
for s in sample:
print(Max(s))
以上三种方法的运行结果都是:
3
1
3
5
其中,方法三只是把方法二改造成了一行代码的lambda表达式。
欢迎加入“派森特给站”社区!
https://bbs.csdn.net/forums/PythonTogether
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/boysoft2002/article/details/121213213
内容来源于网络,如有侵权,请联系作者删除!