leetcode18(无重复字符的最长子串)

给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。

示例 1:

复制代码
输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

思路:

对于长度为0的数组单独处理

其他数组最小的可能长度为1,初始化maxlen=1

用队列的思想:

初始时,队首队尾均在下标为0处,将首位元素加入列表,便于后续查找

右端一直向后移动,

没有在队列中找到该元素,则一直向后移动,将新元素添加到队尾,同时更新最大长度maxlen的值

如果队列中已经包含该元素,则移动左侧,直到之前队列中的该元素被移出队列,然后在新位置纳入该元素,继续向下搜索

直到右端到达数组尾,结束搜索

java 复制代码
class Solution {
    public int lengthOfLongestSubstring(String s) {
        if(s.isEmpty())
            return 0;
        int maxlen = 1;
        int right = 0;
        int left = 0;
        LinkedList<Character> queue = new LinkedList<>();
        queue.addLast(s.charAt(0));
        for(right = 0; right < s.length(); right++) {
            if(queue.contains(s.charAt(right))) {
                while(queue.contains(s.charAt(right))&&right!=0)
                {queue.poll();
                 left++;}
                if(right!=0)
                {queue.addLast(s.charAt(right));}
            }
            else{
                queue.addLast(s.charAt(right));
                maxlen = Math.max(maxlen, right - left+1);
            }
        }
        return maxlen;
    }
}
相关推荐
顾北122 分钟前
MCP服务端开发:图片搜索助力旅游计划
java·spring boot·dubbo
我命由我123459 分钟前
Android 广播 - 静态注册与动态注册对广播接收器实例创建的影响
android·java·开发语言·java-ee·android studio·android-studio·android runtime
赛姐在努力.10 分钟前
【拓扑排序】-- 算法原理讲解,及实现拓扑排序,附赠热门例题
java·算法·图论
yxc_inspire14 分钟前
Java学习第二天
java·面向对象
毕设源码-赖学姐16 分钟前
【开题答辩全过程】以 基于net超市销售管理系统为例,包含答辩的问题和答案
java
昀贝26 分钟前
IDEA启动SpringBoot项目时报错:命令行过长
java·spring boot·intellij-idea
roman_日积跬步-终至千里1 小时前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
野犬寒鸦1 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
wenzhangli71 小时前
ooderA2UI BridgeCode 深度解析:从设计原理到 Trae Solo Skill 实践
java·开发语言·人工智能·开源
霖霖总总1 小时前
[小技巧66]当自增主键耗尽:MySQL 主键溢出问题深度解析与雪花算法替代方案
mysql·算法