मान लीजिए कि हमारे पास एक स्ट्रिंग s है, हमें s के अलग-अलग गैर-रिक्त सबस्ट्रिंग की संख्या ज्ञात करनी है।
इसलिए, यदि इनपुट s ="abaa" जैसा है, तो आउटपुट 8 होगा, क्योंकि सबस्ट्रिंग ["a", "b", "ab", "ba", "aa", "aba", " बा", "आबा"]।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- कोशिश करें:=एक नया नक्शा
- n :=आकार का
- मैं के लिए 0 से n -1 की सीमा में, करो
- करी :=ट्राई
- जे के लिए i से n-1 की श्रेणी में, करें
- c :=s[j]
- अगर c चालू नहीं है, तो
- curr[c] :=एक नया नक्शा
- करा :=curr[c]
- curr["*"] :=सच
- q :=एक कतार बनाएं, और तीन डालें
- उत्तर:=0
- जबकि q खाली नहीं है, करें
- उत्तर:=उत्तर + 1
- t :=q का बायां आइटम, और इस आइटम को q से हटा दें
- टी में प्रत्येक सी के लिए, करें
- यदि c "*" के समान नहीं है, तो
- q के अंत में t[c] डालें
- यदि c "*" के समान नहीं है, तो
- वापसी उत्तर - 1
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
from collections import deque
def solve(s):
trie = {}
n = len(s)
for i in range(n):
curr = trie
for j in range(i, n):
c = s[j]
if c not in curr:
curr[c] = {}
curr = curr[c]
curr["*"] = True
q = deque([trie])
ans = 0
while q:
ans += 1
t = q.popleft()
for c in t:
if c != "*":
q.append(t[c])
return ans - 1
s = "abaa"
print(solve(s)) इनपुट
"abaa"
आउटपुट
8