【每日算法打卡】无重复字符的最长子串

简介: 【每日打卡系列】LeetCode 简单题 200 道

image.png


题目描述


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

示例 1:

输入: s = "abcabcbb"

输出: 3

解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: s = "bbbbb"

输出: 1

解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: s = "pwwkew"

输出: 3

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

示例 4:

输入: s = ""

输出: 0


提示


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


解题思路


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

image.png

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
复制代码


今日打卡完成,目前进度 7/200。



相关文章
|
11月前
|
算法 前端开发 数据处理
小白学python-深入解析一位字符判定算法
小白学python-深入解析一位字符判定算法
122 0
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-439 算法训练 简单字符变换
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-439 算法训练 简单字符变换
100 1
|
算法
LeetCode算法题---无重复字符的最长子串、寻找两个正序数组的中位数(三)
LeetCode算法题---无重复字符的最长子串、寻找两个正序数组的中位数(三)
139 0
|
算法
【算法】位运算算法——判断字符是否唯一
【算法】位运算算法——判断字符是否唯一
|
算法
【算法】滑动窗口——无重复字符的最长子串
【算法】滑动窗口——无重复字符的最长子串
|
算法 测试技术 编译器
【算法 | 实验18】在字符矩阵中查找给定字符串的所有匹配项
题目描述 题目 在字符矩阵中查找给定字符串的所有匹配项 给定一个M×N字符矩阵,以及一个字符串S,找到在矩阵中所有可能的连续字符组成的S的次数。所谓的连续字符,是指一个字符可以和位于其上下左右,左上左下,右上右下8个方向的字符组成字符串。用回溯法求解。
217 1
|
算法 C++
【优选算法】——滑动窗口——3. 无重复字符的最长子串
【优选算法】——滑动窗口——3. 无重复字符的最长子串
|
算法
数据结构和算法——散列函数的构造方法(直接定址法、除留余数法、数字分析法、折叠法、平方取中法、ASCII码加和法、前三字符移位法)
数据结构和算法——散列函数的构造方法(直接定址法、除留余数法、数字分析法、折叠法、平方取中法、ASCII码加和法、前三字符移位法)
215 0
|
人工智能 算法 测试技术
【字符串】【C++算法】828.统计子串中的唯一字符
【字符串】【C++算法】828.统计子串中的唯一字符

热门文章

最新文章