码迷,mamicode.com
首页 > 其他好文 > 详细

力扣题库

时间:2019-02-17 23:29:55      阅读:2236      评论:0      收藏:0      [点我收藏+]

标签:答案   nbsp   一个   div   width   子序列   inf   ring   最长子串   

"""
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 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能够在出现重复字符的时候锁定住,直到出现更长的无重复的字符串

 

力扣题库

标签:答案   nbsp   一个   div   width   子序列   inf   ring   最长子串   

原文地址:https://www.cnblogs.com/ellisonzhang/p/10393204.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!