3、无重复字符的最长子串

我的梦境 提交于 2020-03-09 16:14:17

思路一

储存遍历过的字符串,下一个字符串如果遍历过,则找到储存的位置切片O(n^2)

tem=[]
        length=0
        max=0
        for i in s:
            if i not in tem:
                tem.append(i)
                length+=1
                if length>max:
                    max=length
            else:
                index=tem.index(i)
                tem=tem[(index+1):]
                tem.append(i)
                length=len(tem)
                if length>max:
                    max=length
        return max

在这里插入图片描述

思路二

1、遍历原字符串
2、已经遍历过的字符放在哈希表中(字典,key是字符,value是index)
3、若新字符已经在hash表中,则取其先出现的index为last(相当于变相对字典切片)

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        tem={}
        length=0
        max=0
        last=-1
        for index,j in enumerate(s):
            if j in tem and tem[j] > last:
                length=index-tem[j]
                last=tem[j]
                tem[j]=index
            else:
                tem[j]=index
                length+=1
            max=length if length>max else max
        return max

粘自热评

def lengthOfLongestSubstring(self, s: str) -> int:
        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)
            st[s[j]] = j + 1
        return ans;

在这里插入图片描述
有点迷

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!