1000252. 无重复字符的最长子串
2026/1/12小于 1 分钟约 157 字
1000252. 无重复字符的最长子串
难度: Medium
题目描述
English description is not available for the problem. Please switch to Chinese.
解题思路
代码实现
解决方案
java
class Solution {
public int lengthOfLongestSubstring(String s) {
Map<Character, Integer> occ = new HashMap<>();
int n = s.length();
int rk = -1, ans = 0;
for (int i = 0; i < n; i++) {
if (i != 0) {
// 左指针向右移动一格,移除一个字符
occ.remove(s.charAt(i - 1));
}
// 清除相同字符前的所有字符
while (rk + 1 < n && occ.get(s.charAt(rk + 1)) == null) {
occ.put(s.charAt(rk + 1), rk + 1);
++rk;
}
ans = Math.max(ans, rk - i + 1);
if (rk + 1 < n) {
int rI = occ.get(s.charAt(rk + 1));
occ = occ.entrySet().stream()
.filter(entry -> entry.getValue() >= rI)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
}
}
return ans;
}
}