LeetCode3.无重复字符的最长子串(图解算法)
【摘要】
题目来源:力扣(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^4s由英文字母、数字、符号和空格组成
解题思路:
滑动窗口 + 双指针
设置双指针, left 指向窗口的左端, right 指向窗口的右端的下一个元素,窗口的大小为 right - left 。首先,设置 left=0 , right=1 ,固定 left ,不断移动 right ,直到 right 指向的元素在当前窗口中已存在,然后,找到该元素在窗口中的位置,并将头指针指向该位置的下一个位置;或者 right 移动到了边界外,此时比较 max_str 与 right - 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)