मान लीजिए कि हमारे पास एक स्ट्रिंग 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