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;
    }
}
相关推荐
自然数e15 分钟前
C++多线程【线程管控】之线程转移以及线程数量和ID
开发语言·c++·算法·多线程
Arva .18 分钟前
ConcurrentHashMap 的线程安全实现
java·开发语言
听风吟丶27 分钟前
Java 9+ 模块化系统(Jigsaw)实战:从 Jar 地狱到模块解耦的架构升级
java·架构·jar
昂子的博客28 分钟前
Redis缓存 更新策略 双写一致 缓存穿透 击穿 雪崩 解决方案... 一篇文章带你学透
java·数据库·redis·后端·spring·缓存
百***688230 分钟前
SpringBoot中Get请求和POST请求接收参数详解
java·spring boot·spring
百***416644 分钟前
Java MySQL 连接
java·mysql·adb
Jayden1 小时前
synchronized全解析:从锁升级到性能优化,彻底掌握Java内置锁
java·synchronized·synchronized面试·synchronized扫盲
云在Steven1 小时前
在线确定性算法与自适应启发式在虚拟机动态整合中的竞争分析与性能优化
人工智能·算法·性能优化
任子菲阳1 小时前
学Java第四十五天——斗地主小游戏创作
java·开发语言·windows
前进的李工1 小时前
LeetCode hot100:234 回文链表:快慢指针巧判回文链表
python·算法·leetcode·链表·快慢指针·回文链表