3. Longest Substring Without Repeating Characters
Tags:
Medium
Skills:
Sliding Window
June 24, 2025
04:32 AM
No headings found
Loading content...
Related Posts
Leetcode
No headings found
Related Posts
Leetcode
Problem
Bài toán yêu cầu tìm độ dài của chuỗi con dài nhất trong một chuỗi đầu vào mà không có ký tự nào lặp lại. Đây là một bài toán kinh điển về chuỗi và thường được giải hiệu quả bằng kỹ thuật "sliding window" (cửa sổ trượt) kết hợp với một cấu trúc dữ liệu để kiểm tra sự xuất hiện của ký tự (thường là HashMap hoặc Set).
Approach
Solution
1function lengthOfLongestSubstring(s: string): number {
2 let map: Map<string, number> = new Map();
3 let left = 0;
4 let max_len = 0;
5 for (let right = 0; right < s.length; right++) {
6 const char = s[right];
7 if (map.has(char) && map.get(char) >= left) {
8 left = map.get(char) + 1;
9 }
10 map.set(char, right)
11 max_len = Math.max(max_len, right - left + 1)
12 }
13
14 return max_len
15};char_index_map lưu vị trí xuất hiện gần nhất của từng ký tựchar_index_map.get(current_char)! >= left cập nhật left lên vị trí cũmax_lenvới độ dài window hiện tại (right - left + 1) map.has(char) && map.get(char) >= left Giải thích chi tiêt
map.has(char) kiểm tra xem ký tự char đã từng xuất hiện trong chuỗi chưa (tức là đã có lưu trong map chưa)map.get(char) >= left : Kiểm tra vị trí xuất hiện gần nhất của ký tự char có nằm trong window hiện tại (window từ left -> right ) hay khôngTại sao phải kiểm tra hai điều kiện này?
map.has(char) , bạn sẽ di chuyển pointer left lên mỗi khi gặp lại ký tự. Kể cả khi ký tự đó đã năm ngoài window hiện tại, điều này sẽ làm sai thuật toánÝ nghĩa thực tế
left