前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 求解--无重复字符的最长子串

Python 求解--无重复字符的最长子串

作者头像
用户4945346
发布2024-04-18 14:12:26
960
发布2024-04-18 14:12:26
举报
文章被收录于专栏:pythonista的日常pythonista的日常

这是一个比较经典的算法题,给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。只需要返回最大长度即可

例子:

示例 1:输入: s = "abcabcbb" 输出: 3

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

示例 2:

输入: s = "bbbbb" 输出: 1

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

解法一:

代码语言:javascript
复制
明确记录两个信息,一个无重复字符的内容max_string,一个是无重复字符的长度max_length,
首先对字符串进行遍历,如果遍历的字符元素不在 max_string 中,表示未出现重复字符串,对max_string进行追加元素
如果在 max_string 中,则对 max_string 进行分割,分割点是当前遍历的字符元素,
然后将分割后的字符串进行追加,然后更新 max_length,
max_length 的最终的值是从分割后的字符串长度和当前 max_length 的值中取最大值

代码如下:

代码语言:javascript
复制
def get_max_single_length(s):
    max_length = 0
    max_string = ""

    for i in s:
        if i not in max_string:
            max_string += i
        else:
            max_length = max(max_length, len(max_string))
            max_string = max_string.split(i)[1] + i
    return max(max_length, len(max_string))

解法二:

代码语言:javascript
复制
使用滑动窗口来解决这个问题。
定义一个哈希集合,用于存储当前窗口中的字符,以及两个指针 left 和 right 表示滑动窗口的左右边界。
初始时,left 和 right 都指向 s 的开头。然后,right 向右移动,每次移动时,将当前字符加入哈希集合中。
如果发现当前字符已经在哈希集合中,表示出现了重复字符,此时更新 max_length 为当前窗口长度(right - left)并将 left 移动到重复字符的下一个位置,直到窗口中不再有重复字符为止。
重复以上步骤直到 right 到达字符串 s 的末尾。最终得到的 max_length 即为所求的最长子串长度。

这种方法的时间复杂度为 O(n),其中 n 是字符串的长度。

代码如下:

代码语言:javascript
复制
def length_of_longest_substring(s: str) -> int:
    # 用于存储当前窗口中的字符
    char_set = set()
    # 左右指针和最长子串长度
    left = 0
    max_length = 0
    
    # 右指针向右移动
    for right in range(len(s)):
        # 如果当前字符已经在哈希集合中,表示出现了重复字符
        while s[right] in char_set:
            # 移除左指针对应的字符,并将左指针右移一位
            char_set.remove(s[left])
            left += 1
        # 将当前字符加入哈希集合中
        char_set.add(s[right])
        # 更新最长子串长度
        max_length = max(max_length, right - left + 1)
    
    return max_length
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 pythonista的日常 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档