मान लीजिए कि हमारे पास एक स्ट्रिंग है, हमें सभी वर्णों का उपयोग करके उत्पन्न होने वाले अलग-अलग पैलिंड्रोम की संख्या का पता लगाना होगा। अगर उत्तर बहुत बड़ा है तो परिणाम को 10^9 + 7 से संशोधित करें।
इसलिए, यदि इनपुट s ="xyzzy" जैसा है, तो आउटपुट 2 होगा, क्योंकि हम "zyxyz" और "yzxzy" बना सकते हैं
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
मी =10^9+7
-
char_freq :=s के प्रत्येक वर्ण और उनकी आवृत्तियों को धारण करने वाला नक्शा
-
विषम :=0
-
char_freq में प्रत्येक वर्ण k और आवृत्ति v के लिए, करें
-
अगर वी मॉड 2 1 है, तो
-
विषम :=विषम + 1
-
-
-
अगर विषम> 1, तो
-
वापसी 0
-
-
आधा_लंबाई:=भागफल (ओं का आकार) / 2
-
रेस :=आधा लंबाई का फैक्टोरियल
-
विभाजक :=1
-
char_freq में प्रत्येक वर्ण k और आवृत्ति v के लिए, करें
-
भाजक :=भाजक * का भाज्य (v/2 का भागफल)
-
-
वापसी (res/dividor का भागफल) mod m
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
from math import factorial class Solution: def solve(self, s): m = (10**9+7) char_freq = {} for c in s: char_freq[c] = char_freq.get(c, 0) + 1 odd = 0 for k,v in char_freq.items(): if v % 2 == 1: odd +=1 if odd > 1: return 0 half_length = len(s)//2 res = factorial(half_length) dividor = 1 for k,v in char_freq.items(): dividor *= factorial(v//2) return (res//dividor) % m ob = Solution() print(ob.solve("xyzzy"))
इनपुट
"xyzzy"
आउटपुट
2