Menu
CoddyTech

Implement Trie (Prefix Tree)

בינוניעץ תחיליותpython iconjava iconcpp iconc iconjs icon+10

טרייה, או עץ קידומות, מאחסנת מילים כך שבדיקת תחילתן מהירה. בנו אחת עבור מילים באותיות קטנות, עם שלוש פעולות: insert w מוסיפה את המילה w, search w מציינת אם w עצמה הוכנסה, ו-startsWith p מציינת אם מילה כלשהי שהוכנסה מתחילה ב-p. מילה נחשבת לקידומת של עצמה.

הפעולות ניתנות לכם לפי הסדר בתוך ops, ו-words[i] היא המילה או הקידומת עבור ops[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"]
הסבר
בהתחלה נשמרת רק card, ולכן חיפוש של car מחזיר "false": היא מעולם לא הוכנסה כמילה. היא תחילתה של card, ולכן startsWith car מחזיר "true". לאחר שמכניסים את car, החיפוש מוצא אותה.

lock icon+16 בדיקות נסתרות בשליחה

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"]