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;

    }
相关推荐
等咸鱼的狸猫19 分钟前
JavaScript 隐式类型转换:从入门到精通
javascript
kyriewen3 小时前
我用 Codex 重写了同事维护三年的代码,他没说谢谢——而是找了领导
前端·javascript·ai编程
铁皮饭盒3 小时前
S3已成为文件存储标准,阿里/腾讯/华为云都支持,Bun率先原生支持
前端·javascript·后端
Cobyte3 小时前
22.Vue Vapor 组件 props 的实现
前端·javascript·vue.js
vivo互联网技术4 小时前
ICLR 2026 | 基于后验采样的图像恢复方法LearnIR:人脸去阴影、去雾
人工智能·算法·aigc
浮生望5 小时前
JS字符串与回文算法:从包装类到双指针的面试进阶之路
javascript·算法
疯狂的魔鬼5 小时前
一套 Schema 驱动四视图:记 useCrudSchemas 的设计与实践
前端·javascript·typescript
黄敬峰5 小时前
面试必刷:从JS底层包装类到双指针,彻底搞懂字符串与回文算法
算法
weedsfly6 小时前
栈和堆:JavaScript 内存的“旅馆”和“仓库”
前端·javascript·面试
半个落月6 小时前
JavaScript 字符串面试题:反转、回文与双指针
javascript