【leedcode】0003. 无重复字符最长子串

x33g5p2x  于2021-11-09 转载在 其他  
字(1.2k)|赞(0)|评价(0)|浏览(207)

【leedcode】0003. 无重复字符最长子串

给定一个字符串,请你找出其中不含有重复字符的 **最长子串 **的长度。
示例 1:
输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

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

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

请注意,你的答案必须是 子串的长度,"wke" 是一个子序列,不是子串长度。

方法一:

  1. def maxSizeSubstring(s):
  2. res,cur,dic = 0,0,{}
  3. for idx in range(len(s)):
  4. if s[idx] in dic:
  5. cur = max(cur, dic[s[idx]] + 1)
  6. dic[s[idx]] = idx
  7. res = max(res, idx - cur + 1)
  8. return res
  9. sample = "abcabcbb","bbbbb","pwwkew","I am HannYang."
  10. for s in sample:
  11. print(maxSizeSubstring(s))

方法二:


 

  1. def maxSizeSubstring2(s):
  2. res = 0
  3. for i in range(len(s)):
  4. for j in range(len(s),0,-1):
  5. if i>=j: continue
  6. t = s[i:j]
  7. size = len(t)
  8. if size==len(set(t)):
  9. if size>res:
  10. res = size
  11. return res
  12. sample = "abcabcbb","bbbbb","pwwkew","I am HannYang."
  13. for s in sample:
  14. print(maxSizeSubstring2(s))

方法三:

  1. 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]))])
  2. sample = "abcabcbb","bbbbb","pwwkew","I am HannYang."
  3. for s in sample:
  4. print(Max(s))

以上三种方法的运行结果都是:

3
1
3
5

其中,方法三只是把方法二改造成了一行代码的lambda表达式。

欢迎加入“派森特给站”社区!

https://bbs.csdn.net/forums/PythonTogether

相关文章