मान लीजिए हमारे पास एक स्ट्रिंग s है, हमें सभी वर्णों का उपयोग करके उत्पन्न किए जा सकने वाले विशिष्ट पैलिंड्रोम की संख्या ढूंढनी है। यदि उत्तर बहुत बड़ा है तो परिणाम को 10^9 + 7 से मॉड करें।
उदाहरण के लिए, यदि इनपुट s = "xyzzy" है, तो आउटपुट 2 होगा, क्योंकि हम "zyxyz" और "yzxzy" बना सकते हैं।
इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे:
- m = 10^9+7
- char_freq := s के प्रत्येक वर्ण और उनकी आवृत्तियों को रखने वाला मैप
- odd := 0
- char_freq में प्रत्येक वर्ण k और आवृत्ति v के लिए करें:
- यदि v % 2 == 1, तो odd := odd + 1
- यदि odd > 1, तो 0 वापस करें
- half_length := len(s) // 2
- res := half_length का फैक्टोरियल
- divisor := 1
- char_freq में प्रत्येक वर्ण k और आवृत्ति v के लिए करें:
- divisor := divisor * (v//2) का फैक्टोरियल
- (res // divisor) % 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)
divisor = 1
for k, v in char_freq.items():
divisor *= factorial(v//2)
return (res // divisor) % m
ob = Solution()
print(ob.solve("xyzzy"))
इनपुट
"xyzzy"
आउटपुट
2