美文网首页
3. 无重复字符的最长子串(中等)-滑动窗口

3. 无重复字符的最长子串(中等)-滑动窗口

作者: MatrixZ | 来源:发表于2023-05-18 07:42 被阅读0次

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

分析

  • 题目不长,有很多细节
  • 遍历字符串,当遇到和之前窗口内相同的字母时,要进行处理,计算窗口的长度和最大长度进行比较,并且要对开始位置进行更新
  • 计算窗口内的字母,可以用hash,这样比较快,但是怎么移除不在窗口内的呢,其实可以通过开始位置的索引是否小于重复字母的索引,字母的索引不断更新,可以通过字典记忆,只需要看最新的字母的索引和开始未知的索引的位置比较即可,而其中hash也可以通过字典的key集合替代
class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        # 边走边滑动,用字典记住初始位置
        alpha_to_index = {}
        # 记录窗口开始位置
        start_index = 0
        max_len = 0
        for i, alpha in enumerate(s):
            if alpha in alpha_to_index and alpha_to_index[alpha] >= start_index:
                max_len = max(max_len, i - start_index)
                # 要从之前的相同的字母位置+1开始算起
                start_index = alpha_to_index[alpha] + 1
            
            alpha_to_index[alpha] = i
        
        n = len(s)
        
        max_len = max(max_len, n - start_index)

        return max_len

相关文章

网友评论

      本文标题:3. 无重复字符的最长子串(中等)-滑动窗口

      本文链接:https://www.haomeiwen.com/subject/ukewsdtx.html