最长无重复字符串

在这里插入图片描述
我看到题的第一反应是hash表+动态规划
一次遍历,用hash表记录遍历过的元素及其索引号
用hash表判断有无重复元素
而最大长度还涉及到字符串的起点问题
所以用动态规划这两个参数——起点和最大长度
我们用left和l来表示的
时间复杂度:O(n)

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        hashtable={}
        l=0
        n=len(s)
        left=-1
        for i in range(n):
            if s[i] in hashtable:
                left=left if left>hashtable[s[i]] else hashtable[s[i]]
            hashtable[s[i]]=i
            l=l if l>i-left else i-left
        return l

在这里插入图片描述
后来我做完以后看了看题解
他提到了滑动窗口,我就仔细研究了一下
我发现他的思路和我的方法有异曲同工之秒
他用set来盛放遍历过的元素
出现重复的就循环删除最开始的 直到不重复
而我不会循环删除那么傻
由于我用hashtable记录了遍历过的元素及其索引值
当遇见重复元素时我可以直接找到其位置
比他循环删除方便快捷高效
我这hash+动态规划属于优化版的滑动窗口了

发布了115 篇原创文章 · 获赞 0 · 访问量 2101

猜你喜欢

转载自blog.csdn.net/weixin_45569078/article/details/104853137