寒假打卡:2026-2-7

日常学习:算法

⽆重复字符的最⻓⼦串

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

示例 1:

复制代码
输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。注意 "bca" 和 "cab" 也是正确答案。

示例 2:

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

示例 3:

复制代码
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

算法思想:

利用规律,使用"滑动窗口"来解决问题

(1)left=0,right=0;

(2)进窗口:让字符进入哈希表

(3)判断:窗口是否出现重复字符

-->出窗口-->从哈希表中删除字符-->更新结果

java 复制代码
class Solution
{
public int lengthOfLongestSubstring(String ss)
{
char[] s = ss.toCharArray();
int[] hash = new int[128]; // ⽤数组模拟哈希表
int left = 0, right = 0, n = ss.length();
int ret = 0;
while(right < n)
{
hash[s[right]]++; // 进⼊窗⼝
while(hash[s[right]] > 1) // 判断
hash[s[left++]]--; // 出窗⼝
ret = Math.max(ret, right - left + 1); // 更新结果
right++; // 让下⼀个字符进⼊窗⼝
}
return ret;
}
}
相关推荐
To_OC2 小时前
LC 49 字母异位词分组:想到哈希表很简单,选对 key 才是精髓
javascript·算法·leetcode
kyriewen5 小时前
用了半年 Claude Code 后,我尝试关掉它写了一周代码——结果比想象中严重
前端·javascript·ai编程
小bo波6 小时前
使用Thread子类创建线程 VS 使用Runnable接口创建线程的区别
java·多线程·thread·并发编程·runnable
山河木马6 小时前
矩阵专题0-webGL中的矩阵
javascript·webgl·计算机图形学
SamDeepThinking6 小时前
高并发场景下,CompletableFuture与ForkJoinPool该如何取舍?
java·后端·面试
Asize7 小时前
多模态生图:从 Vite 工程化到前端调用 Qwen Image
javascript·人工智能·后端
陳陈陳7 小时前
从Token到Embedding:一篇文章搞懂大模型的「文字数学变形记」
前端·javascript·ai编程
用户938515635077 小时前
从 O(n²) 到 O(nlogn):一文读懂快速排序的“快”与“妙”
javascript·算法
橘子星7 小时前
LLM 无状态架构实践:从原理到代码落地
前端·javascript·人工智能
To_OC8 小时前
手写快排次次翻车?别死背快排模板了,这才是面试官想听的底层逻辑
javascript·算法·排序算法