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 分钟前
Qt 6 嵌入 Android 原生应用完整教程
android·开发语言·qt
liu****14 分钟前
第一章 Qt 概述
开发语言·c++·qt
知行合一。。。16 分钟前
Python--04--数据容器(列表 List)
开发语言·python
程芯带你刷C语言简单算法题19 分钟前
Day48~对于高度为 n 的台阶,从下往上走,每一步的阶数为 1,2,3 中的一个。问要走到顶部一共有多少种走法
c语言·开发语言·学习·算法·c
csbysj202021 分钟前
SQL NOT NULL约束详解
开发语言
休息一下接着来22 分钟前
C++ 设计模式:Pimpl(Pointer to Implementation)
c++·算法·设计模式
低调小一31 分钟前
Kotlin 2025–2026 客户端开发路线:语言升级 × 跨端落地 × AI Agent 入门
开发语言·人工智能·kotlin
大阳光男孩33 分钟前
ElementUI表格懒加载子级更新数据刷新不生效问题
前端·javascript·elementui
wy31362282135 分钟前
C#——意框架(结构说明)
前端·javascript·c#
苦藤新鸡41 分钟前
18.矩阵同行同列全置零
数据结构·c++·算法·力扣