"""给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
"""
def choose(msg): lst=[] for i in range(len(msg)): for j in range(i+1,len(msg)+1): m=msg[i:j] if len(set(m)) == len(m): lst.append(m) lst=list(sorted(lst,key=lambda x:len(x))) if len(lst)==0: return 0 return len(lst[-1]) print(choose("")) #经测试可以实现功能 #但是超过时间限制
大神方法 def Substring(s): st = {} i, ans = 0, 0 for j in range(len(s)): if s[j] in st: i = max(st[s[j]], i) ans = max(ans, j - i + 1) t[s[j]] = j + 1 return ans
测试 s="abbccd
j=0时
j=1时
j=2时
此时循环到s[2]即第二个b
b前面有两个字符,因此 i 被赋值为2
j=3时
j=4时
此时循环到s[4]即第二个c
c前面有四个字符,因此 i 被赋值为4
j=5时
i的作用就是当出现重复字符的时候,把当前字符前面的字符个数赋值给i
ans = max(ans, j - i + 1)
使ans能够在出现重复字符的时候锁定住,直到出现更长的无重复的字符串
原文地址:https://www.cnblogs.com/ellisonzhang/p/10393204.html
时间: 2024-11-09 05:07:16