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;

    }
相关推荐
辣椒粉丝13 分钟前
记rspack想提issuse,提太慢白嫖不上了
前端·javascript
XiaoyaoCarter15 分钟前
每日两道leetcode
c++·算法·leetcode·职场和发展·贪心算法
七月丶18 分钟前
🧼 为什么我开始在项目里禁用 CSS 文件?
前端·javascript·后端
好柿会發生19 分钟前
关于chartjs的简单使用,各位大佬有知道什么办法通过js设置图表的宽高嘛
javascript·vue.js
矛取矛求21 分钟前
STL C++详解——priority_queue的使用和模拟实现 堆的使用
开发语言·c++
海底火旺23 分钟前
【灵魂拷问】你的JS类型检测真的正确吗?Object.prototype.toString.call才是永远的神!
前端·javascript·面试
前端太佬23 分钟前
Vue3异步数据加载的陷阱与最佳实践:从内存泄漏到优雅实现
前端·javascript·vue.js
青瓦梦滋24 分钟前
【算法】双指针8道速通(C++)
数据结构·算法·leetcode
前端太佬26 分钟前
v-show 的隐藏魔法:为什么它比 v-if 更“懒”?
前端·javascript·vue.js
程序员-King.33 分钟前
day48—双指针-通过删除字母匹配到字典最长单词(LeetCode-524)
算法·leetcode·双指针