寒假打卡: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;
}
}
相关推荐
一灯架构13 小时前
90%的人答错!一文带你彻底搞懂ArrayList
java·后端
踏着七彩祥云的小丑13 小时前
pytest——Mark标记
开发语言·python·pytest
Dream of maid13 小时前
Python12(网络编程)
开发语言·网络·php
小李子呢021113 小时前
前端八股CSS(2)---动画的实现方式
前端·javascript
W230357657314 小时前
经典算法:最长上升子序列(LIS)深度解析 C++ 实现
开发语言·c++·算法
Y40900114 小时前
【多线程】线程安全(1)
java·开发语言·jvm
不爱吃炸鸡柳14 小时前
Python入门第一课:零基础认识Python + 环境搭建 + 基础语法精讲
开发语言·python
布局呆星14 小时前
SpringBoot 基础入门
java·spring boot·spring
minji...15 小时前
Linux 线程同步与互斥(三) 生产者消费者模型,基于阻塞队列的生产者消费者模型的代码实现
linux·运维·服务器·开发语言·网络·c++·算法
Dxy123931021615 小时前
Python基于BERT的上下文纠错详解
开发语言·python·bert