博客
关于我
LeetCode 无重复字符的最长子串 获取字符串中不重复的子串最大长度
阅读量:791 次
发布时间:2023-01-31

本文共 1011 字,大约阅读时间需要 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 是字符串的长度,适用于处理大规模数据。通过动态调整窗口起点,确保了算法的高效性。

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

    你可能感兴趣的文章
    Java反序列化-CC2分析,从零基础到精通,收藏这篇就够了!
    查看>>
    Java反序列化和JNDI注入漏洞案例实战
    查看>>
    JAVA反序列化漏洞修复解决方法
    查看>>
    java反编译工具--jd-gui
    查看>>
    java取整和java四舍五入方法
    查看>>
    Java可变参数列表
    查看>>
    Java各中依赖包介绍
    查看>>
    Java合同管理系统(源码+mysql+文档)
    查看>>
    Java合肥市公务员报名管理系统(源码+mysql+文档)
    查看>>
    Java合肥惠康养老平台app(源码+mysql+文档)
    查看>>
    Java后端使用socketio,实现小程序答题pk功能
    查看>>
    Java后端开发书架
    查看>>
    Java后端开发:推荐常用的13款开发工具(非常详细)零基础入门到精通,收藏这一篇就够了
    查看>>
    Java基础学习总结(47)——JAVA输入输出流再回忆
    查看>>
    Java基础学习总结(4)——对象转型
    查看>>
    Java基础学习总结(4)——对象转型
    查看>>
    Java基础学习总结(51)——JAVA分层理解
    查看>>
    Java基础学习总结(53)——HTTPS 理论详解与实践
    查看>>
    Java基础学习总结(54)——JSON和Map转换的工具类
    查看>>
    Java基础学习总结(56)——学Java必知十大学习目标
    查看>>