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;

    }
相关推荐
Doubbbbbbble云12 小时前
多维空间索引结构R树与KD树性能对比研究4
算法
海上小飞龙12 小时前
【KMP算法-中篇】next 数组的递推:往前填一位,靠的是往回退几步
算法
keyipatience12 小时前
B树详解:从零构建平衡多路搜索树
数据结构·b树·算法·图搜索
个 人 练 习 生12 小时前
C++-----string基本使用详解
开发语言·c++·学习
朝朝辞暮i12 小时前
C++ 第 5 课:else if + 多条件判断 + && / || / !
开发语言·c++
ynchyong13 小时前
python list 地常用操作
开发语言·python
千谦阙听13 小时前
【C++篇】:string类——常用接口、底层原理与深浅拷贝
开发语言·c++·学习·visual studio
linux_cfan13 小时前
videojs v10 源代码系列解读:32 · Reactor 模型:信号驱动的状态机
前端·javascript·音视频
羲云13 小时前
给页面加一个 JSON 编辑器:jsoneditor 的功能、配置和接入注意事项
javascript
FluxArt13 小时前
GPT Image 2.5 多图参考怎么用:Flux Art 生成与编辑教程
数据结构·gpt·算法