Menu
CoddyTech

Implement Trie (Prefix Tree)

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

בנו עץ טריי (עץ קידומות) עבור מילים באותיות קטנות עם שלוש פעולות: 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"]