博客
关于我
3. Longest Substring Without Repeating Characters
阅读量:798 次
发布时间:2019-03-25

本文共 957 字,大约阅读时间需要 3 分钟。

为解决给定一个字符串中找最长子串的重复字符问题,以下方法可以有效地实现:

方法思路

我们可以使用哈希表来记录每个字符最后出现的位置。遍历字符串时,对于每个字符,如果它已经在当前窗口中出现过,则调整窗口的起始位置,以确保没有重复字符。具体步骤如下:

  • 初始化一个空的哈希表 last 用于记录每个字符的最后出现位置。
  • 用两个指针 leftright 分别指示窗口的起始和结束位置,初始值均为 0。
  • 遍历字符串的每个字符 char,并以其索引 i 作为 right
  • 如果 char 已存在于 last,且其最后出现的位置 last[char] 大于当前的 left,则调整 leftlast[char] + 1
  • 更新 last[char] 为当前索引 i
  • 计算当前窗口长度为 i - left + 1,并比较是否为最大值 max_len,更新最大值。
  • 遍历结束后,返回 max_len 作为结果。
  • 这种方法的时间复杂度为 O(n),其中 n 是字符串的长度,空间复杂度为 O(1),因为哈希表的大小是固定的(根据字符集的大小)。

    代码实现

    def lengthOfLongestSubstring(s):    last = {}    max_len = 0    left = 0    for i, char in enumerate(s):        if char in last:            # 如果字符已经存在,更新left为该字符上一次出现的位置+1            left = max(left, last[char] + 1)        # 记录当前字符的位置        last[char] = i        # 计算当前窗口长度        current_len = i - left + 1        if current_len > max_len:            max_len = current_len    return max_len

    解释

    通过使用哈希表跟踪字符位置,算法可以在每次遇到重复字符时快速调整窗口起始位置,以确保在当前窗口内没有重复字符。这种方法高效且直接,能够在一次遍历中找到最长子串,性能优异。

    转载地址:http://yhnyk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现minimum cut最小切割流算法(附完整源码)
    查看>>
    Objective-C实现minimum partition最小分区算法(附完整源码)
    查看>>
    Objective-C实现Minimum Priority Queu最小优先级队列算法(附完整源码)
    查看>>
    Objective-C实现Minimum Vertex Cover最小顶点覆盖算法(附完整源码)
    查看>>
    Objective-C实现MinimumCostPath最小成本路径算法(附完整源码)
    查看>>
    Objective-C实现min_heap最小堆算法(附完整源码)
    查看>>
    Objective-C实现mobius function莫比乌斯函数算法(附完整源码)
    查看>>
    Objective-C实现modular Binary Exponentiation模二进制指数算法 (附完整源码)
    查看>>
    Objective-C实现modular exponential模指数算法(附完整源码)
    查看>>
    Objective-C实现monte carlo dice蒙特卡洛骰子模拟算法(附完整源码)
    查看>>
    Objective-C实现monte carlo蒙特卡罗算法(附完整源码)
    查看>>
    Objective-C实现Mosaic Augmentation马赛克增强算法(附完整源码)
    查看>>
    Objective-C实现msd 基数排序算法(附完整源码)
    查看>>
    Objective-C实现MSRCR算法(附完整源码)
    查看>>
    Objective-C实现multi level feedback queue多级反馈队列算法(附完整源码)
    查看>>
    Objective-C实现multilayer perceptron classifier多层感知器分类器算法(附完整源码)
    查看>>
    Objective-C实现multiplesThreeAndFive三或五倍数的算法 (附完整源码)
    查看>>
    Objective-C实现n body simulationn体模拟算法(附完整源码)
    查看>>
    Objective-C实现naive string search字符串搜索算法(附完整源码)
    查看>>
    Objective-C实现natural sort自然排序算法(附完整源码)
    查看>>