3. 无重复字符的最长子串
- 题号:3
- 来源:LeetCode
- 难度:中等
- 标签:
滑动窗口哈希表字符串 - 语言:TypeScript · Python · Java
- 解法:3 个
- 作者:lmliheng
- 最近更新:2026-09-29
TypeScript
TypeScript · O(n) 时间 · O(n) 空间 · 更新于 2026-09-27
滑动窗口配计数表,重复时右移左边界
typescript
/**
* @difficulty medium
* @tags 滑动窗口,哈希表,字符串
* @time O(n)
* @space O(n)
* @note 滑动窗口配计数表,重复时右移左边界
* @
* 滑动窗口
*
*/
/**
*
* @滑动窗口-优解
* 始终维护一个无重复子串
* 先确定右边界,再压缩左边界,直到右边界抵达n-1
* 抵达res=xxx这段时,已经就是一个无重复子串
*
*/
function lengthOfLongestSubstring(s: string) {
let res = 0
let map = new Map()
let left = 0
for (let i = 0; i < s.length; i++) {
if (!map.has(s[i])) {
map.set(s[i], 1)
} else {
map.set(s[i], map.get(s[i]) + 1)
}
while (map.get(s[i]) > 1) {
map.set(s[left], map.get(s[left]) - 1)
left++
}
res = Math.max(res, i - left + 1)
}
return res
};源码:ts/leetcode/3.无重复字符的最长子串.ts
Python
Python · O(n) 时间 · O(n) 空间 · 更新于 2026-09-29
滑动窗口配字符计数,超 1 就左移
python
"""
@difficulty medium
@tags 滑动窗口,哈希表,字符串
@time O(n)
@space O(n)
@note 滑动窗口配字符计数,超 1 就左移
无重复字符的最长子串
lc 3
"""
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
n=len(s)
res=0
left=0
dict1={}
for i in range(0,n):
if s[i] in dict1:
dict1[s[i]]+=1
else:
dict1[s[i]]=1
while dict1[s[i]]>1:
dict1[s[left]]-=1
left+=1
res=max(res,i-left+1)
return res源码:python/leetcode/hot100/8.py
Java
Java · O(n) 时间 · O(min(n, 字符集大小)) 空间 · 更新于 2026-09-27
滑动窗口配计数表,右指针字符计数超 1 就收缩左边界
java
/**
* @lc 3
* @title 无重复字符的最长子串
* @difficulty medium
* @tags 滑动窗口,哈希表,字符串
* @time O(n)
* @space O(min(n, 字符集大小))
* @note 滑动窗口配计数表,右指针字符计数超 1 就收缩左边界
*/
public class LengthOfLongestSubstring {
public int lengthOfLongestSubstring(String s) {
int res = 0;
int n = s.length();
Map<Character, Integer> map = new HashMap<>();
int left = 0;
for (int i = 0; i < n; i++) {
if (map.containsKey(s.charAt(i))) {
map.put(s.charAt(i), map.get(s.charAt(i)) + 1);
} else {
map.put(s.charAt(i), 1);
}
while (map.get(s.charAt(i)) > 1) {
map.put(s.charAt(left), map.get(s.charAt(left)) - 1);
left++;
}
res = Math.max(res, i - left + 1);
}
return res;
}
}源码:Java/src/main/java/com/algorithm/leetcode/LengthOfLongestSubstring.java
在 GitHub 上查看题目所在目录:lmliheng/algorithm