สมมติว่าเรามีรายการคำที่เป็นตัวแทนของพจนานุกรมภาษาอังกฤษ เราต้องหาคำที่ยาวที่สุดในรายการคำที่กำหนด ซึ่งสามารถสร้างอักขระได้ทีละตัวโดยใช้คำอื่นๆ ในคำ หากมีคำตอบที่เป็นไปได้มากกว่าหนึ่งคำตอบ ให้ส่งคืนคำที่ยาวที่สุดด้วยลำดับที่เล็กที่สุด หากไม่มีคำตอบ ให้คืนค่าสตริงว่าง
ดังนั้น หากอินพุตเป็น ["h","he","hel","hell", "hello"] เอาต์พุตจะเป็น "hello"
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ลอง :=แผนที่ใหม่
- กำหนดฟังก์ชัน insert() นี้จะใช้เวลาคำพูด
- ตอนนี้ :=พยายาม
- สำหรับแต่ละ c ใน word ทำ
- ถ้าไม่ได้อยู่ในตอนนี้ −
- ตอนนี้[c] ={'#', False} จากนั้น
- ตอนนี้ :=ตอนนี้[c]
- ตอนนี้['#'] :=จริง
- ถ้าไม่ได้อยู่ในตอนนี้ −
- กำหนดฟังก์ชัน search() นี้จะใช้เวลาคำพูด
- ตอนนี้ :=พยายาม
- สำหรับแต่ละ c ใน word ทำ
- ถ้า '#' ในตอนนี้และไม่ใช่ตอนนี้['#'] เป็น True แล้ว
- คืนค่าเท็จ
- ตอนนี้ :=ตอนนี้[c]
- กลับมาเดี๋ยวนี้['#']
- ถ้า '#' ในตอนนี้และไม่ใช่ตอนนี้['#'] เป็น True แล้ว
- สำหรับแต่ละคำในคำ ทำ
- เรียกแทรก(คำ)
- ตอบ :=สตริงว่าง
- สำหรับแต่ละคำในคำ ทำ
- หากค้นหา (คำ) และ (ขนาดของคำ> ขนาดของ ans หรือ (ขนาดของคำเท่ากับขนาดของ ans และ word
- ตอบ :=คำ
- หากค้นหา (คำ) และ (ขนาดของคำ> ขนาดของ ans หรือ (ขนาดของคำเท่ากับขนาดของ ans และ word
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def longestWord(self, words): self.trie = {} def insert(word): now = self.trie for c in word: if c not in now: now[c] = {'#': False} now = now[c] now['#'] = True def search(word): now = self.trie for c in word: if '#' in now and not now['#']: return False now = now[c] return now['#'] for word in words: insert(word) ans = "" for word in words: if (search(word) and (len(word) > len(ans) or (len(word) == len(ans) and word < ans))): ans = word return ans ob = Solution() print(ob.longestWord(["h","he","hel","hell", "hello"]))
อินพุต
["h","he","hel","hell", "hello"]
ผลลัพธ์
hello