🔄Update: 无重复字符的最长子串
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
# 无重复字符的最长子串
|
||||
|
||||
## 题目
|
||||
|
||||
给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。
|
||||
|
||||
|
||||
|
||||
示例 1:
|
||||
|
||||
输入: s = "abcabcbb"
|
||||
输出: 3
|
||||
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
|
||||
示例 2:
|
||||
|
||||
输入: s = "bbbbb"
|
||||
输出: 1
|
||||
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
|
||||
示例 3:
|
||||
|
||||
输入: s = "pwwkew"
|
||||
输出: 3
|
||||
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
|
||||
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
|
||||
|
||||
|
||||
提示:
|
||||
|
||||
0 <= s.length <= 5 * 104
|
||||
s 由英文字母、数字、符号和空格组成
|
||||
|
||||
|
||||
## 思路
|
||||
|
||||
- 滑动窗口
|
||||
- 区间
|
||||
- 不重复子串
|
||||
- 维护
|
||||
- 哈希表
|
||||
- `HashMap<Character, Integer>`
|
||||
|
||||
## 代码
|
||||
|
||||
```java
|
||||
class Solution {
|
||||
public int lengthOfLongestSubstring(String s) {
|
||||
// Init
|
||||
int l = 0, r = 0;
|
||||
Map<Character, Integer> map = new HashMap<>();
|
||||
int ans = 0;
|
||||
|
||||
// Traverse
|
||||
for (; r < s.length(); r++) {
|
||||
char cur = s.charAt(r);
|
||||
// EXIST
|
||||
if (map.containsKey(cur)) {
|
||||
l = map.get(cur);
|
||||
ans = Math.max(ans, r - l);
|
||||
l++;
|
||||
map.put(cur, r);
|
||||
}
|
||||
// NOT EXIST
|
||||
else {
|
||||
map.put(cur, r);
|
||||
}
|
||||
}
|
||||
return ans;
|
||||
}
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user