ধরুন আমাদের একটি স্ট্রিং আছে; আমাদের দীর্ঘতম প্যালিনড্রোমটি খুঁজে বের করতে হবে যা স্ট্রিং থেকে অক্ষরগুলি মুছে বা এলোমেলো করে তৈরি করা যেতে পারে। এবং যদি একাধিক প্যালিনড্রোম থাকে তবে শুধুমাত্র একটি ফেরত দিন।
সুতরাং, যদি ইনপুট pqqprrs এর মত হয়, তাহলে আউটপুট হবে pqrsrqp।
-
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
গণনা :=256 আকারের অ্যারে, 0 দিয়ে ভরা
-
0 থেকে স্ট্রিং এর আকারের মধ্যে, করুন
-
গণনা [ASCII of(string[i]) ] :=count[ASCII of(string[i]) ] + 1
-
-
শুরু :=ফাঁকা স্ট্রিং, মধ্য :=ফাঁকা স্ট্রিং, শেষ :=ফাঁকা স্ট্রিং
-
অক্ষর :=ASCII of('a')
-
যখন অক্ষর <=ASCII of('z'), do
-
যদি গণনা [অক্ষর] এবং 1 অ-শূন্য হয়, তাহলে
-
মধ্য :=অক্ষর
-
গণনা [অক্ষর] :=গণনা [অক্ষর] - 1
-
অক্ষর :=অক্ষর - 1
-
-
অন্যথায়,
-
[অক্ষর]/2 (পূর্ণসংখ্যা বিভাজন) গণনা করার জন্য আমি 0 রেঞ্জের জন্য, কর
-
begin :=begin + অক্ষর থেকে (অক্ষর)
-
-
-
অক্ষর :=অক্ষর + 1
-
-
শেষ :=শুরু
-
শেষ :=বিপরীত প্রান্ত
-
(মাঝামাঝি) কনক্যাটেনেট এন্ড
থেকে রিটার্ন শুরু কনক্যাটেনেট অক্ষর
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def get_palindrome(string):
count = [0]*256
for i in range(len(string)):
count[ord(string[i])] += 1
begin = ""
mid = ""
end = ""
character = ord('a')
while character <= ord('z'):
if (count[character] & 1):
mid = character
count[character] -= 1
character -= 1
else:
for i in range(count[character]//2):
begin += chr(character)
character += 1
end = begin
end = end[::-1]
return begin + chr(mid) + end
string = "pqqprrs"
print(get_palindrome(string)) ইনপুট
"pqqprrs"
আউটপুট
pqrsrqp