3. Longest Substring Without Repeating Characters - Medium
前往題目
搬運一下之前的心得
想法
- 這題也沒寫出來,有嘗試用
2 pointers
和hashmap
做,但失敗了 - 解法看了半小時才懂,卡在為甚麼要
remove
那個character
,當發現有同樣的時候 - 原因是因為那整個
substring
都不能要了,也記錄了長度,所以會逐漸remove
思路
Set
儲存substring
Sliding window
char
沒在set
裡面的話就加進去,然後看看有沒有更長- 在的話就
remove left pointer
的值(為什麼不是right pointer
,因為那整個substring
直到重複的那個都不要了,藉由循環會剛好把整個set
不需要的都remove
掉,只留下可以繼續使用的substring
)
如果看不懂就直接跑一遍code
,並使用pwwkew
這個測資
Code
class Solution {
public int lengthOfLongestSubstring(String s) {
int l = 0, r = 0, max = 0;
Set<Character> set = new HashSet();
// Until r pointer reach the end
while (r < s.length()) {
if (!set.contains(s.charAt(r))) {
set.add(s.charAt(r));
++r;
max = Math.max(max, set.size());
} else {
set.remove(s.charAt(l));
++l;
}
}
return max;
}
}
3. Longest Substring Without Repeating Characters - Medium
https://f88083.github.io/2024/01/06/3-Longest-Substring-Without-Repeating-Characters-Medium/