Menu
CoddyTech

Implement Trie (Prefix Tree)

أنشئ شجرة بادئات (trie) للكلمات المكتوبة بأحرف صغيرة، تتضمن ثلاث عمليات: تضيف insert w الكلمة w، وتحدد search w ما إذا كانت w نفسها قد أُدرجت، وتحدد startsWith p ما إذا كانت هناك كلمة مُدرجة تبدأ بـ p. تُعدّ الكلمة بادئةً لنفسها.

العملية i هي ops[i] على words[i]. نفّذ العمليات بالترتيب على شجرة بادئات فارغة، وأعِد سلسلة واحدة لكل عملية: "null" للإدراج، أو "true" أو "false" لعملية بحث أو startsWith.

الدالة

trieOps(ops: string-array, words: string-array) → string-array
opsstring-array
العمليات، بالترتيب الذي تُنفَّذ به
wordsstring-array
الكلمة أو البادئة لكل عملية
تُرجعstring-array
إجابة واحدة لكل عملية، كنص

القيود

  • 1 ≤ ops.length ≤ 2000
  • words.length == ops.length
  • كل قيمة من ops[i] هي insert أو search أو startsWith.
  • 1 ≤ words[i].length ≤ 20
  • words[i] لا يحتوي إلا على أحرف إنجليزية صغيرة.

أمثلة

المدخلات
ops = ["insert", "search", "startsWith", "insert", "search"]words = ["card", "car", "car", "car", "car"]
المخرجات
["null", "false", "true", "null", "true"]
الشرح
car يبدأ بـ card، لذا فإن startsWith car هي "true"، لكن car لم يُدرج قط، لذا فإن البحث الأول هو "false". بعد insert car، يعثر البحث عليه.
challenge icon

سؤال إضافي

كيف ستضيف عملية countPrefix p تُعيد عدد الكلمات المخزنة المتميزة التي تبدأ بـ p، مع الحفاظ على زمن تنفيذ O(L)؟

إعادة ضبط الشيفرة
def trieOps(ops, words):
    # اكتب الكود هنا

اختبار #1

اختبار #2

اختبار #3

الوسائط

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

الإخراج المتوقع

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