当前位置: 首页 > article >正文

Python版本无重复字符的最长子串

题目描述:

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

示例 1:

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

示例 2:

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

示例 3:

输入: s = "pwwkew"
输出: 3
解释:最长的无重复字符的子串是 "wke",其长度为 3

代码实现(Python):

def lengthOfLongestSubstring(s):
    # 使用字典存储字符及其索引
    char_dict = {}
    # 初始化最长子串长度和滑动窗口的左右边界
    max_length = 0
    left = 0
    # 遍历字符串
    for right in range(len(s)):
        # 如果字符已经存在于字典中,并且索引大于等于左边界
        if s[right] in char_dict and char_dict[s[right]] >= left:
            # 更新左边界为重复字符的下一个索引
            left = char_dict[s[right]] + 1
        # 更新字符的索引
        char_dict[s[right]] = right
        # 更新最长子串长度
        max_length = max(max_length, right - left + 1)
    # 返回最长子串长度
    return max_length

# 测试代码
s1 = "abcabcbb"
s2 = "bbbbb"
s3 = "pwwkew"
print(lengthOfLongestSubstring(s1))  # 输出: 3
print(lengthOfLongestSubstring(s2))  # 输出: 1
print(lengthOfLongestSubstring(s3))  # 输出: 3

代码讲解:

  1. 滑动窗口:我们使用两个指针 leftright 来表示一个滑动窗口,这个窗口内的子串不包含重复字符。

  2. 字典存储:使用一个字典 char_dict 来存储字符及其索引,键是字符,值是字符在字符串中的索引。

  3. 遍历字符串:通过一个循环遍历字符串 sright 指针向右移动。

  4. 更新左边界:如果当前字符 s[right] 已经在字典中,并且其索引不小于左边界 left,则更新左边界 left 为重复字符的下一个索引。

  5. 更新字符索引:无论字符是否重复,都更新字典中当前字符的索引为 right

  6. 更新最长子串长度:每次循环时,都计算当前窗口的长度 right - left + 1,并更新最长子串长度 max_length

  7. 返回结果:遍历结束后,返回最长子串的长度。

这个算法的时间复杂度是 O(n),其中 n 是字符串的长度,因为我们只需要遍历一次字符串。空间复杂度是 O(min(n, m)),其中 m 是字符集的大小,最坏情况下,我们需要存储所有字符及其索引。在本题中,由于字符集大小是固定的(ASCII 字符集),空间复杂度可以认为是 O(1)。


http://www.kler.cn/news/358585.html

相关文章:

  • CSMA/CD协议 监听算法
  • ROS理论与实践学习笔记——5 ROS机器人系统仿真之URDF、Gazebo与Rviz综合应用
  • Caffeine Cache解析(一):接口设计与TinyLFU
  • python如何使用SciPy matplotlib完成数据分析?
  • 【Flutter】基础入门:项目结构
  • spring-cloud-alibaba-nacos-config2023.0.1.*启动打印配置文件内容
  • 机器学习中的朴素贝叶斯
  • 【ChatGPT】如何让 ChatGPT 提供简短、精准的答案
  • 新版vs code + Vue高亮、语法自动补全插件
  • OkEdge边缘计算网关助力数字化工厂管理系统高效部署与维护
  • IntelliJ IDEA 常用快捷键详解与自定义修改方法
  • SoapShell 更新 | 增强免杀版适配冰蝎4.0客户端的WebShell
  • Tailwind css系列教程(二)
  • oracle numtodsinterval
  • ansibie的安装 |Ansible 在CentOS7上批量部署JDK、Tomcat、jenkins和Nginx
  • 028 elasticsearch索引管理-ElasticsearchRestTemplate
  • 水下侧扫声呐图像数据集,沉船,1.13G。声纳数据集 水下声纳数据集 水下图像声纳数据集
  • C#基于SkiaSharp实现印章管理(11)
  • 【力扣 | SQL题 | 每日3题】力扣1990, 2020, 2051
  • 基于Python实现“吾爱海洋”论坛自动签到