मान लीजिए कि हमारे पास एक स्ट्रिंग s है। अब एक विभाजन को एक अच्छा विभाजन कहा जाता है जब हम s को 2 गैर-रिक्त स्ट्रिंग्स p और q में विभाजित कर सकते हैं जहाँ इसका संयोजन s के बराबर होता है और p और q में अलग-अलग अक्षरों की संख्या बराबर होती है। हमें यह ज्ञात करना है कि हम कितने अच्छे विभाजन कर सकते हैं।
इसलिए, यदि इनपुट s ="xxzxyx" जैसा है, तो आउटपुट 2 होगा क्योंकि बंटवारे के कई तरीके हैं लेकिन अगर हम ("xxz", "xyx") या ("xxzx", "yx") जैसे विभाजित होते हैं तो वे अच्छे हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
परिणाम:=0
-
बायां:=वस्तुओं की आवृत्ति गिनने के लिए एक खाली माल
-
दाएं:=प्रत्येक वर्ण की आवृत्ति को s में गिनें
-
प्रत्येक सी इन एस के लिए, करें
-
बाएं [सी]:=बाएं [सी] + 1 पी>
-
दाएं [सी]:=दाएं [सी] - 1 पी>
-
अगर सही [c] शून्य है, तो
-
दाएं हटाएं[c]
-
-
यदि बाएँ का आकार दाएँ के आकार के समान है, तो
-
परिणाम:=परिणाम + 1
-
-
-
वापसी परिणाम
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
from collections import Counter def solve(s): result = 0 left, right = Counter(), Counter(s) for c in s: left[c] += 1 right[c] -= 1 if not right[c]: del right[c] if len(left) == len(right): result += 1 return result s = "xxzxyx" print(solve(s))
इनपुट
"xxzxyx"
आउटपुट
2