मान लीजिए कि हमारे पास दो गैर-रिक्त तार s और t हैं जो समान लंबाई के हैं। हमें उन्हें सबस्ट्रिंग में इस तरह विभाजित करना होगा कि s और t सबस्ट्रिंग की प्रत्येक जोड़ी एक ही आकार की हो और वे एक दूसरे के विपर्यय हों। अब कट इंडेक्स इस तरह से खोजें कि इससे s और t की अधिकतम संख्या में कटौती हो। यदि कोई परिणाम नहीं मिलता है, तो खाली सूची लौटाएं।
इसलिए, यदि इनपुट s ="bowcattiger" t ="owbactietgr" जैसा है, तो आउटपुट [0, 3, 5, 6, 10] होगा, क्योंकि हम स्ट्रिंग को 5 विभाजनों में विभाजित कर सकते हैं जैसे कि प्रत्येक स्ट्रिंग एक है एक दूसरे का विपर्ययण। s =["धनुष", "ca", "t", "tige", "r"], t =["owb", "ac", "t", "ietg", "r"]
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- अंतराल:=एक नई सूची
- cs :=s में मौजूद वर्ण और उसकी आवृत्ति वाला नक्शा
- ct :=t और उसकी आवृत्ति में मौजूद वर्ण वाला नक्शा
- यदि cs, ct के समान नहीं है, तो
- नई सूची लौटाएं
- x के लिए s - 1 से 0 तक के श्रेणी आकार में, करें
- cs[s[x]] :=cs[s[x]] - 1
- ct[t[x]] :=ct[t[x]] - 1
- यदि cs, ct के समान है, तो
- अंतराल के अंत में x डालें
- सूची अंतरालों को क्रमबद्ध करें और वापस लौटें
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
from collections import Counter class Solution: def solve(self, a, b): intervals = [] ca = Counter(a) cb = Counter(b) if ca != cb: return [] for x in reversed(range(len(a))): ca[a[x]] -= 1 cb[b[x]] -= 1 if ca == cb: intervals.append(x) return sorted(intervals) ob = Solution() s = "bowcattiger" t = "owbactietgr" print(ob.solve(s, t))
इनपुट
"bowcattiger", "owbactietgr"
आउटपुट
[0, 3, 5, 6, 10]