ধরুন, আমাদের একটি স্ট্রিং s দেওয়া হয়েছে। আমাদের যাচাই করতে হবে যে এই স্ট্রিং এর কোনো অ্যানাগ্রাম (অক্ষর পরিবর্তন করে বানানো শব্দ) প্যালিনড্রোম বানায় কিনা।
যেমন, ইনপুট s = "aarcrec" হলে আউটপুট হবে True, কারণ এর একটি অ্যানাগ্রাম হলো "racecar" যা প্যালিনড্রোম।
সমাধানের ধাপসমূহ
- প্রতিটি ক্যারেক্টারের ফ্রিকোয়েন্সি (ব 어쩌면) গণনা করুন একটি ম্যাপে।
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))
ইনপুট
"aarcrec"
আউটপুট
True