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;
    }
}
相关推荐
Java面试题总结15 小时前
mybatis插件
java·tomcat·mybatis
科学实验家15 小时前
二叉树的几道题
算法
abcy07121315 小时前
flink state实例
大数据·算法·flink
橘子海全栈攻城狮15 小时前
【最新源码】基于SpringBoot + Vue的超市管理系统的设计与实现D002
java·开发语言·vue.js·spring boot·后端·spring
smartvxworks16 小时前
Linux 实时内核(Linux Real-Time Kernel)详解:原理、实践与优化
java·linux·服务器
qizayaoshuap16 小时前
# [特殊字符] 密码生成器 — 鸿蒙ArkTS安全算法与密码强度评估系统
java·算法·安全·华为·harmonyos
AC赳赳老秦16 小时前
OpenClaw 采集任务日志审计:全程记录采集行为,满足合规溯源与企业审计要求
java·大数据·python·数据挖掘·数据分析·php·openclaw
良木林16 小时前
滑动窗口 - LeetCode hot 100
javascript·算法·leetcode·双指针·滑动窗口
2401_8414956416 小时前
【数据结构】B*树
数据结构·c++·b树·算法·删除·插入·三分分裂
风起洛阳@不良使16 小时前
spring中xml和注解开发的对比
xml·java·spring