LeetCode 3. Longest Substring Without Repeating Characters
LeetCode 3. Longest Substring Without Repeating Characters (无重复字符的最长子串)
题目
链接
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
问题描述
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
提示
0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成
思路
滑动窗口的题目。
设置一个数对window表示我们所用的窗口。leftright表示左右边界。每次从右侧增加,如果该字符已经存在,就从左侧删除,直到该字符不重复,这时更新ans。
复杂度分析
时间复杂度 O(n)
空间复杂度 O(n)
代码
Java
public static int lengthOfLongestSubstring(String s) {
Map<Character, Integer> window = new HashMap<>();
int len = s.length();
int left = 0, right = 0;
int ans = 0;
while (right < len) {
char ch = s.charAt(right);
right++;
window.put(ch, window.getOrDefault(ch, 0) + 1);
while (window.get(ch) > 1) {
char remove = s.charAt(left);
left++;
window.put(remove, window.get(remove) - 1);
}
ans = Math.max(ans, right - left);
}
return ans;
}
分类:
LeetCode(Java)
标签:
滑动窗口
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)