LeetCode 无重复字符的最长子串 获取字符串中不重复的子串最大长度
发布日期:2025-04-05 02:07:50 浏览次数:9 分类:精选文章

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

为了解决这个问题,我们需要找出给定字符串中不含重复字符的最长子串的长度。这个问题可以通过滑动窗口技术结合哈希表来高效地解决。

方法思路

这个问题可以通过滑动窗口法来解决。滑动窗口技术用于维护一个窗口,该窗口内的字符不重复。我们使用哈希表记录字符的最新位置,当遇到重复字符时,调整窗口起点,确保窗口内没有重复字符。一旦遇到重复字符,移除已经用过的字符,更新窗口起点。

具体步骤如下:

  • 初始化一个哈希表来记录字符的最新出现位置。
  • 遍历字符串的每个字符,从左到右扩展窗口。
  • 对于每个字符,检查它是否已经在当前窗口内出现:
    • 如果存在,调整窗口起点,确保窗口内没有重复字符。
    • 更新字符的最新出现位置。
  • 记录当前窗口的长度,并更新最大长度。
  • 解决代码

    public int lengthOfLongestSubstring(String s) {
    Map
    charMap = new HashMap<>();
    int maxLength = 0;
    int start = 0;
    for (int end = 0; end < s.length(); end++) {
    char c = s.charAt(end);
    if (charMap.containsKey(c)) {
    start = Math.max(start, charMap.get(c) + 1);
    }
    charMap.put(c, end);
    int currentWindowLength = end - start + 1;
    if (currentWindowLength > maxLength) {
    maxLength = currentWindowLength;
    }
    }
    return maxLength;
    }

    代码解释

    • 哈希表:用于记录每个字符最后出现的索引,确保我们可以快速查找到重复字符的位置。
    • 窗口起点:通过滑动窗口技术动态调整,确保窗口内没有重复字符。
    • 窗口长度计算:每次调整窗口起点后,计算当前窗口的长度,更新最长长度。

    这个方法的时间复杂度为 O(n),其中 n 是字符串的长度,适用于处理大规模数据。通过动态调整窗口起点,确保了算法的高效性。

    上一篇:LeetCode 热题 HOT 100 (java算法)实时更新 未完
    下一篇:leetCode 字符串反转

    发表评论

    最新留言

    初次前来,多多关照!
    [***.217.46.12]2025年04月18日 00时17分45秒