মান করুন আমাদের Trie ডেটা স্ট্রাকচার বানাতে হবে, যেখানে তিনটি বেসিক অপারেশন থাকবে: insert(), search(), startsWith()। আমরা ধরে নিচ্ছি সকল ইনপুট লোয়ারকেস অক্ষরে। উদাহরণস্বরূপ, নিচের ফাংশন কল করলে:
Trie trie = new Trie()trie.insert("apple")trie.search("apple")// সত্য রিটার্ন করবেtrie.search("app")// মিথ্যা রিটার্ন করবেtrie.startsWith("app")// সত্য রিটার্ন করবেtrie.insert("app")trie.search("app")// সত্য রিটার্ন করবে
সমাধানের ধাপগুলো (ডিকশনারি ভিত্তিক):
- শুরুতে একটি খালি ডিকশনারি
childবানান insertমেথড:current := child- শব্দের প্রতিটি অক্ষর
lএর জন্য:- যদি
lcurrent-এ না থাকে, তবেcurrent[l] := নতুন ডিকশনারি current := current[l]
- যদি
current['#'] = 1(শব্দের শেষ চিহ্নিত করতে)
searchমেথড:current := child- শব্দের প্রতিটি অক্ষর
lএর জন্য:- যদি
lcurrent-এ না থাকে, তবে মিথ্যা রিটার্ন করুন current := current[l]
- যদি
current['#'] == 1হলে সত্য, অন্যথায় মিথ্যা রিটার্ন করুন
startsWithমেথড:current := child- প্রিফিক্সের প্রতিটি অক্ষর
lএর জন্য:- যদি
lcurrent-এ না থাকে, তবে মিথ্যা রিটার্ন করুন current := current[l]
- যদি
- সত্য রিটার্ন করুন
নিচে ইমপ্লিমেন্টেশন দেওয়া হলো:
উদাহরণ
class Trie(object):
def __init__(self):
self.child = {}
def insert(self, word):
current = self.child
for l in word:
if l not in current:
current[l] = {}
current = current[l]
current['#'] = 1
def search(self, word):
current = self.child
for l in word:
if l not in current:
return False
current = current[l]
return '#' in current
def startsWith(self, prefix):
current = self.child
for l in prefix:
if l not in current:
return False
current = current[l]
return True
ob1 = Trie()
ob1.insert("apple")
print(ob1.search("apple"))
print(ob1.search("app"))
print(ob1.startsWith("app"))
ob1.insert("app")
print(ob1.search("app"))
ইনপুট
ob1 = Trie()
ob1.insert("apple")
print(ob1.search("apple"))
print(ob1.search("app"))
print(ob1.startsWith("app"))
ob1.insert("app")
print(ob1.search("app"))
আউটপুট
True False True True