สมมติว่าเรามีรายการคำที่เป็นตัวแทนของพจนานุกรมภาษาอังกฤษ เราต้องหาคำที่ยาวที่สุดในรายการคำที่กำหนด ซึ่งสามารถสร้างอักขระได้ทีละตัวโดยใช้คำอื่นๆ ในคำ หากมีคำตอบที่เป็นไปได้มากกว่าหนึ่งคำตอบ ให้ส่งคืนคำที่ยาวที่สุดด้วยลำดับที่เล็กที่สุด หากไม่มีคำตอบ ให้คืนค่าสตริงว่าง
ดังนั้น หากอินพุตเป็น ["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