मान लीजिए हमारे पास एक स्ट्रिंग s है। हमें यह जांचना है कि उस स्ट्रिंग का कोई एनाग्राम (अक्षरों का पुनर्व्यवस्थित रूप) पैलिंड्रोम बनाता है या नहीं।
उदाहरण के लिए, यदि इनपुट s = "aarcrec" है, तो आउटपुट True होगा क्योंकि इसका एक एनाग्राम "racecar" है जो पैलिंड्रोम है।
समाधान दृष्टिकोण
एक स्ट्रिंग का एनाग्राम पैलिंड्रोम तभी बन सकता है जब अधिकतम एक अक्षर की आवृत्ति विषम (odd) हो। अन्य सभी अक्षरों की आवृत्ति सम (even) होनी चाहिए।
एल्गोरिदम चरण:
- सभी अक्षरों और उनकी आवृत्तियों को स्टोर करने के लिए एक मैप/डिक्शनरी बनाएं
odd_count = 0इनिशियलाइज़ करें- आवृत्तियों के प्रत्येक मान के लिए:
- यदि आवृत्ति विषम है, तो
odd_countबढ़ाएं - यदि
odd_count > 1, तो False लौटाएं - अन्यथा True लौटाएं
पायथन कार्यान्वयन
from collections import defaultdict
def solve(s):
freq = defaultdict(int)
for char in s:
freq[char] += 1
odd_count = 0
for f in freq.values():
if f % 2 == 1:
odd_count += 1
if odd_count > 1:
return False
return True
s = "aarcrec"
print(solve(s)) # True
इनपुट
"aarcrec"
आउटपुट
True
व्याख्या:
स्ट्रिंग "aarcrec" में अक्षरों की आवृत्तियां:
- a: 2 (सम)
- r: 2 (सम)
- c: 2 (सम)
- e: 1 (विषम)
केवल एक अक्षर (e) की आवृत्ति विषम है, इसलिए इसका एनाग्राम पैलिंड्रोम बना सकता है (जैसे "racecar")।