当前位置: 首页 > news >正文

2025年- G29-Lc103-3. 最长无重复字符的子字符串--java版

1.题目描述

在这里插入图片描述

2.思路

思路1:在字符串 s 中寻找最长的无重复字符子串的长度,它使用了 滑动窗口 和 HashMap 记录字符索引 的方法。

例子1:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
总结:用hashmap记录键值对,键唯一,但是值可以不同。
start来更新索引,也就是遇到重复字符,说明按此顺序的字符有重复。我们应该跳到下一个字母继续执行。
在这里插入图片描述

补充1:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
··············································································
补充2
在这里插入图片描述
在这里插入图片描述
·······························································
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.代码实现

class Solution {

    public int lengthOfLongestSubstring(String s) {

        //1.定义一个哈希表,哈希表可以满足键唯一,值不同.存储字符和字符的索引
        //对应到字符串就是字母一样,但是索引可以不动
        HashMap<Character,Integer> s1=new HashMap<>();
        //2.初始化无重复字符串的最大长度
        int maxLen=0;
        int start=0;
        for(int i=0;i<s.length();i++)
        {
            char letter=s.charAt(i);
            //3.处理遇到重复的字符的子字符串。查找哈希表中现有的键是不是有该字符
            // 如果字符 letter在 HashMap 里,并且索引大于等于 start,就更新 start
            //比如abca,因为start=0,第四个a第二次遇到因为索引是0,等于第一次遇到的a,索引为0,但是此时用大于号,start不更新
            if(s1.containsKey(letter)&&s1.get(letter)>=start)
            {
               start=s1.get(letter)+1;
                //4.更新遇到重复字符的索引
            }
            // 记录当前字符的索引
            s1.put(letter,i);
            //4.计算当前不重复的字符串的长度
            int currLen=i-start+1;
            maxLen=Math.max(currLen,maxLen);
        }
        return maxLen;

    }

    // public static void main(String args[])
    // {
    //     Solution07 test=new Solution07();
    //     String s1="abcdeasdfgh";
    //     int num=test.lengthOfLongestSubstring(s1);
    //     System.out.println("返回无重复字符串的长度"+num);

    // }
}


http://www.dtcms.com/a/89376.html

相关文章:

  • PHP接口开发:从基础到高级的全面指南
  • 算法题(107):function
  • Windows 10/11 使用 VSCode + SSH 免密远程连接 Ubuntu 服务器(指定端口)
  • matlab使用fmincon开加速
  • 光电效应及普朗克常数的测定数据处理 Python实现
  • 时隔多年,终于给它换了皮肤,并正式起了名字
  • 洛谷: P1443 马的遍历
  • OpenHarmony 入门——ArkUI 跨页面数据同步和应用全局单例的UI状态存储AppStorage 小结(三)
  • QML控件 - Slider
  • python脚本处理excel文件
  • 如何选择?Postman vs JMeter 对比介绍
  • zynq7020 最小ps环境速通
  • 开源大模型使用总结
  • Unity选择框(魔兽争霸3)
  • 文生图语义识别插件使用(controlnet)
  • STM32F103_LL库+寄存器学习笔记01 - 梳理CubeMX生成的LL库最小的裸机系统框架
  • immortalwrt一键istoreOS风格化
  • Unity射击游戏手榴弹笔记
  • 广告推荐算法 - 学习笔记
  • AL11和SM69 文件服务器中创建文件夹
  • 二叉树练习
  • 垃圾短信分类
  • 深度学习篇---卷积网络结构
  • 23种设计模式-创建型模式-单例
  • WPF 与 C# 开发深度剖析
  • 如何避免权限分配不合理导致的信息安全风险?
  • 【天梯赛】L2-012(实战反思代码实现)
  • 压测工具开发(一)——使用Qt Designer构建简单界面
  • Java编程思想:为何有时要将子类对象赋值给父类引用
  • 六级备考 词汇量积累(day11)