LeetCode3.无重复字符的最长子串(图解算法)

举报
Python新视野 发表于 2021/09/09 23:01:25 2021/09/09
【摘要】 题目来源:力扣(LeetCode) 题目描述: 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。 示例1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复...

题目来源:力扣(LeetCode)


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


示例1:

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

示例2:

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

示例3:

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

  
 
  • 1
  • 2
  • 3
  • 4

示例4:

输入: s = ""
输出: 0

  
 
  • 1
  • 2

提示:

  • 0 <= s.length <= 5 * 10^4
  • s 由英文字母、数字、符号和空格组成

解题思路:
滑动窗口 + 双指针
设置双指针, left 指向窗口的左端right 指向窗口的右端的下一个元素,窗口的大小为 right - left 。首先,设置 left=0right=1 ,固定 left ,不断移动 right ,直到 right 指向的元素在当前窗口中已存在,然后,找到该元素在窗口中的位置,并将头指针指向该位置的下一个位置;或者 right 移动到了边界外,此时比较 max_strright - left 的大小,返回最大子串。
在这里插入图片描述
python实现

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        length = len(s)
        # 即长度为0或1,len(s)即为最长子串
        if length < 2:
            return length
        # 初始化left,right两个指针
        left, right = 0, 1
        # 最长长度设置为1
        max_str = 1
        # 退出条件,right到达边界
        while right < length:
            # 当right未到达边界,且right指向的元素没有出现在子串中
            while right < length and s[right] not in s[left: right]:
                # right指针右移
                right += 1
            max_str = max(max_str, right - left)
            # 当right未到达边界
            if right != length:
                # 将left指针移动到重复元素的下一个位置
                left += s[left: right].index(s[right]) + 1
        return max_str

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

在这里插入图片描述

文章来源: blog.csdn.net,作者:Dream丶Killer,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_43965708/article/details/116456508

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。