Menu
CoddyTech

Implement Trie (Prefix Tree)

Trung bìnhTriepython iconjava iconcpp iconc iconjs icon+10

Hãy xây dựng một trie (cây tiền tố) cho các từ viết thường với ba thao tác: insert w thêm từ w, search w cho biết liệu chính từ w đã được thêm vào hay chưa, và startsWith p cho biết liệu có từ nào đã được thêm vào bắt đầu bằng p hay không. Một từ cũng được tính là tiền tố của chính nó.

Thao tác i là ops[i] trên words[i]. Hãy thực hiện lần lượt các thao tác trên một trie rỗng và trả về một chuỗi cho mỗi thao tác: "null" đối với thao tác thêm, "true" hoặc "false" đối với thao tác tìm kiếm hoặc startsWith.

Hàm

trieOps(ops: string-array, words: string-array) → string-array
opsstring-array
các thao tác, theo thứ tự chúng chạy
wordsstring-array
từ hoặc tiền tố cho mỗi phép toán
Trả vềstring-array
một câu trả lời cho mỗi phép toán, dưới dạng văn bản

Ràng buộc

  • 1 ≤ ops.length ≤ 2000
  • words.length == ops.length
  • Mỗi ops[i] là insert, search hoặc startsWith.
  • 1 ≤ words[i].length ≤ 20
  • words[i] chỉ chứa các chữ cái tiếng Anh viết thường.

Ví dụ

Đầu vào
ops = ["insert", "search", "startsWith", "insert", "search"]words = ["card", "car", "car", "car", "car"]
Đầu ra
["null", "false", "true", "null", "true"]
Giải thích
car là phần đầu của card, nên startsWith car là "true", nhưng car chưa bao giờ được thêm vào, nên lần tìm kiếm đầu tiên trả về "false". Sau khi insert car, lần tìm kiếm sẽ tìm thấy nó.
challenge icon

Câu hỏi mở rộng

Làm thế nào để thêm thao tác countPrefix p trả về số từ riêng biệt đã lưu bắt đầu bằng p, vẫn trong thời gian O(L)?

Đặt lại code
def trieOps(ops, words):
    # Viết code ở đây

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

ops = ["insert", "search", "startsWith", "insert", "search"]
words = ["card", "car", "car", "car", "car"]

Đầu ra mong đợi

["null", "false", "true", "null", "true"]