Bài toán chuỗi thường gặp
Ba dạng bài chuỗi xuất hiện liên tục trong bài tập và phỏng vấn: palindrome (đối xứng), anagram (đảo chữ), và đếm ký tự. Quan trọng hơn cả lời giải là mẫu đằng sau: hai con trỏ và bảng đếm.
1. Palindrome: chuỗi đọc xuôi ngược như nhau
"radar", "abba", "12321" là palindrome. Mẫu giải: hai con trỏ từ hai đầu tiến vào giữa, so từng cặp. Lệch một cặp là không phải palindrome.
2. Anagram: hai chuỗi cùng tập ký tự, khác thứ tự
"listen" và "silent" là anagram. Mẫu giải kinh điển: đếm ký tự — nếu hai chuỗi có cùng số lượng mỗi ký tự thì là anagram. (Cách khác: sắp xếp cả hai rồi so, nhưng O(n log n) chậm hơn.)
Dùng dict làm bảng đếm → duyệt mỗi chuỗi một lần → O(n), nhanh hơn cách sắp xếp.
3. Đếm ký tự / tần suất
Rất nhiều bài quy về "đếm mỗi thứ xuất hiện bao nhiêu lần" bằng dict:
4. Hai mẫu chìa khoá
| Mẫu | Khi nào dùng | Độ phức tạp |
|---|---|---|
| Hai con trỏ | so sánh/đối xứng từ hai đầu (palindrome, đảo) | O(n) thời gian, O(1) bộ nhớ |
| Bảng đếm (dict) | so sánh thành phần, tần suất (anagram, đếm) | O(n) thời gian, O(k) bộ nhớ |
Hai mẫu này (cùng sliding window) sẽ học kỹ ở Trụ 4 — Mẫu giải bài. Ở đây bạn gặp chúng lần đầu qua bài chuỗi.
5. Mẫu nhận diện
- "Đối xứng", "đọc xuôi ngược", "từ hai đầu" → hai con trỏ.
- "Cùng tập ký tự", "tần suất", "đếm xuất hiện" → dict đếm.
- Đừng vội sắp xếp (O(n log n)) nếu đếm bằng dict (O(n)) là đủ.
6. 🎮 Trò chơi: Bài toán chuỗi
7. Quiz kiểm tra nhanh
8. Hoàn thành — XONG Chương 2.1! 🎉
…☑️ Hết Chương 2.1 (Mảng & chuỗi). Tiếp theo: 2.2.1 — Danh sách liên kết đơn.