3. 无重复字符的最长子串

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

子串

的长度。

示例 1:

复制代码
输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

复制代码
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

复制代码
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

思路:求不重复最长子串,采用双指针+哈希表实现

先从头遍历每个字符 设指针k=-1 当头指针为i=0 也就是第一个字符 此时子串为1(i-k)

如果每个字符不同就放到哈希表中,字符相同就更新指针k,指向最近一次相同字符所出现的位置

java 复制代码
 HashMap<Character, Integer> map = new HashMap<>();
        int k =-1;
        int res=0;
        for (int i = 0; i <s.length(); i++) {

            if(!map.containsKey(s.charAt(i)))
                map.put(s.charAt(i),i);

             else
                { map.put(s.charAt(i), i);//需要更新最新出现字符的哈希表
                k = Math.max(k, map.get(s.charAt(i)));
             }


                res = Math.max(res,i-k);



        }


      return res;

    }
相关推荐
一条大祥脚4 分钟前
Codeforces Round 1099 (Div. 2) 构造|贪心|图论|还原数组
java·算法·图论
mCell8 分钟前
JavaScript:从事件循环到手写 Promise
javascript·面试·浏览器
沐知全栈开发9 分钟前
Servlet 表单数据处理指南
开发语言
超梦dasgg10 分钟前
详细讲解:WebMvcConfigurer 接口
java·开发语言·spring
阿里嘎多学长20 分钟前
2026-05-22 GitHub 热点项目精选
开发语言·程序员·github·代码托管
JAVA社区20 分钟前
Java进阶全套教程(三)—— Spring框架核心精讲
java·开发语言·spring·面试·职场和发展·mybatis
Sheldon Chao22 分钟前
Lecture 7 基于策略梯度的算法
人工智能·算法·机器学习
始三角龙27 分钟前
LeetCode hoot 100 -- 缺失的第一个正整数
算法·leetcode·职场和发展
jzlhll12334 分钟前
Kotlin 协程高级用法之 NonCancellable
android·开发语言·kotlin
飞Link42 分钟前
深度解析孪生网络(Siamese Network):从原理、技巧到实战应用
算法·数据挖掘·回归