Chuyển tới nội dung chính

Chuỗi (string)

Bạn sẽ học được gì

Chuỗi (string) thực chất là một mảng của ký tự. Bạn sẽ hiểu tính bất biến (immutable) — đặc điểm gây bất ngờ nhất của chuỗi — và một bẫy hiệu năng kinh điển khi nối chuỗi trong vòng lặp.

1. Trực quan: chuỗi là dãy ký tự có chỉ số

chỉ số: 0 1 2 3 4
┌────┬────┬────┬────┬────┐
s = │ 'H'│ 'e'│ 'l'│ 'l'│ 'o'│ s = "Hello"
└────┴────┴────┴────┴────┘

Mọi thứ học về mảng đều áp cho chuỗi: s[0]'H' (O(1)), len(s) là 5, duyệt từng ký tự bằng vòng lặp. Chuỗi chỉ là mảng mà mỗi ô là một ký tự.

2. Tính BẤT BIẾN (immutable) — điểm khác biệt lớn

Ở nhiều ngôn ngữ (Python, Java, JS), chuỗi không sửa được tại chỗ. Bạn không thể làm s[0] = 'h'. Mọi "thay đổi" thực chất tạo ra chuỗi MỚI.

Đang tải trình chạy code…

Hệ quả: mỗi lần "sửa" chuỗi tốn O(n) (vì tạo bản sao mới). Nhớ điều này — nó dẫn tới bẫy ở mục 4.

3. Chạy debug: đảo ngược chuỗi bằng hai con trỏ

Vì chuỗi giống mảng, nhiều kỹ thuật mảng áp được. Bước qua việc đảo "CODE" thành list rồi hoán đổi hai đầu (kỹ thuật hai con trỏ sẽ học kỹ ở Trụ 4):

🐞 Đảo ngược "CODE"Bước 1/6
1kt = list("CODE") # ['C','O','D','E']
2trai, phai = 0, len(kt) - 1
3while trai < phai:
4 kt[trai], kt[phai] = kt[phai], kt[trai]
5 trai += 1
6 phai -= 1
7ket_qua = "".join(kt)
Biến tại bước này
kt['C','O','D','E']
👉 Đổi chuỗi thành list để sửa được.

4. Bẫy hiệu năng: nối chuỗi trong vòng lặp

Vì chuỗi bất biến, s += ky_tu trong vòng lặp tạo chuỗi mới mỗi lần → tổng O(n²)! Bấm Run để so sánh cách sai và cách đúng:

Đang tải trình chạy code…

Quy tắc: xây chuỗi lớn → gom các phần vào list rồi "".join(...) một lần. Đừng += chuỗi trong vòng lặp dài.

5. Các thao tác chuỗi hay dùng

Thao tácVí dụGhi chú
Truy cập ký tựs[i]O(1)
Độ dàilen(s)O(1)
Cắt láts[2:5]O(k), tạo chuỗi mới
Nốia + bO(len a + len b), chuỗi mới
Táchs.split(",")O(n)
Ghép"".join(ds)O(tổng độ dài)
Kiểm tra chứa"ab" in sO(n·m)

6. Mẫu nhận diện

  • Bài toán xử lý văn bản, ký tự, từ → tư duy như mảng ký tự.
  • Cần sửa chuỗi nhiều → đổi sang list ký tự, sửa, rồi join lại.
  • Thấy s += ... trong vòng lặp → cảnh báo O(n²), đổi sang list + join.

7. 🎮 Trò chơi: Hiểu chuỗi

🎮 Hiểu chuỗiCâu 1/4· Điểm 0· 🔥 0

Chuỗi = mảng ký tự, BẤT BIẾN: mọi sửa đổi tạo chuỗi mới.

In ra gì?

s = "Hello"
print(s[1])

8. Quiz kiểm tra nhanh

📝 Quiz kiểm tra nhanh
1. Chuỗi về bản chất là?
2. "Bất biến (immutable)" nghĩa là?
3. Để sửa chuỗi nhiều lần hiệu quả, nên?

9. Hoàn thành

☑️ Tiếp theo: 2.1.5 — Bài toán chuỗi thường gặp (palindrome, anagram, đếm ký tự).