मान लीजिए कि हमारे पास लोअरकेस अक्षरों के साथ एक स्ट्रिंग है। हमें सभी को s में खोजना होगा जहां एक अलग स्थान पर s में एक और सबस्ट्रिंग होना चाहिए जो उस लिए गए सबस्ट्रिंग का विपर्यय है। हमें शब्दावली क्रम में सबस्ट्रिंग की सूची ढूंढनी होगी।
इसलिए, यदि इनपुट s ="abcba" जैसा है, तो आउटपुट ['a', 'a', 'ab', 'abc', 'abcb', 'b', 'b', 'ba') होगा। , 'bc', 'bcba', 'cb', 'cba'] उनमें से प्रत्येक के लिए हम स्ट्रिंग में ही मौजूद विभिन्न विपर्यय पा सकते हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
रेस :=एक नई सूची
-
एल:=एस का आकार
-
मैं के लिए 1 से एल की सीमा में, करते हैं
-
smap :=एक खाली शब्दकोश, और सभी मान प्रकार की सूची के हैं
-
j के लिए 0 से L - i की सीमा में, करें
-
cs :=इंडेक्स j से j + i-1] में s का सबस्ट्रिंग]
-
k :=cs के आइटम्स को क्रमबद्ध रूप में जोड़ने के बाद स्ट्रिंग
-
smap[k]
. के अंत में cs डालें
-
-
smap में प्रत्येक कुंजी k और मान v के लिए, करें
-
यदि v>=2 का आकार है, तो
-
v के तत्वों को रेस में डालें
-
-
-
-
छँटाई के बाद वापसी रेस
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें
from collections import defaultdict def solve(s): res = [] L = len(s) for i in range(1, L + 1): smap = defaultdict(list) for j in range(L - i + 1): cs = s[j : j + i] k = "".join(sorted(cs)) smap[k].append(cs) for k, v in smap.items(): if len(v) >= 2: res.extend(v) return sorted(res) s = "abcba" print(solve(s))
इनपुट
"abcba"
आउटपुट
['a', 'a', 'ab', 'abc', 'abcb', 'b', 'b', 'ba', 'bc', 'bcba', 'cb', 'cba']