zoukankan      html  css  js  c++  java
  • LeetCode 3.无重复字符的最长子串

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

    示例 1:
    输入: "abcabcbb"
    输出: 3
    解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

    示例 2:
    输入: "bbbbb"
    输出: 1
    解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

    示例 3:
    输入: "pwwkew"
    输出: 3
    解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
    请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

    class Solution:
        def lengthOfLongestSubstring(self, s: str) -> int:
            """
            双指针问题
            性质:依次递增地枚举子串的起始位置,那么子串的结束位置也是递增的
            0、初始化左指针,查找集合
            1、移动右指针:
                当前长度加1;
                如果当前位置元素已经在查找集中,
                    从查找集合删除左指针对应的元素,
                    左指针移动一步,长度减1
                    直到导致当前元素重复的元素已经移除
                更新最长长度
                将右指针位置元素加入集合   
            """
            if not s:return 0
            L = 0
            lookup = set()
            n = len(s)
            max_len = 0
            cur_len = 0
            for R in range(n):
                #print('before',lookup)
                cur_len += 1
                while s[R] in lookup:       ## while  不是if
                    lookup.remove(s[L])
                    L += 1
                    cur_len -= 1
                if cur_len > max_len:max_len = cur_len
                lookup.add(s[R])
                #print("after",lookup)
            return max_len
    
  • 相关阅读:
    四、MYSQL的数据类型
    一、InnoDB引擎
    Spring源码分析(一)
    ActiveMQ 的安装与使用(springboot版本)
    12、JAVA内存模型与线程
    9、虚拟机字节码执行引擎
    8、类加载机制
    7、Class文件的格式
    6、使用jconsole+VisualVM分析JVM
    5、JVM的监控与分析工具
  • 原文地址:https://www.cnblogs.com/sandy-t/p/13234614.html
Copyright © 2011-2022 走看看