मान लीजिए हमारे पास एक स्ट्रिंग है; हमें स्ट्रिंग से वर्णों को हटाकर या फेरबदल करके उत्पन्न होने वाला सबसे लंबा पैलिंड्रोम ढूंढना है। और यदि एक से अधिक पैलिंड्रोम हैं तो केवल एक वापस करें।
तो, यदि इनपुट pqqprrs की तरह है, तो आउटपुट pqrsrqp होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
count := 256 आकार की सरणी, 0 से भरी
i के लिए 0 से स्ट्रिंग के आकार की सीमा में, करें
count[ASCII of(string[i])] := count[ASCII of(string[i])] + 1
begin := खाली स्ट्रिंग, mid := खाली स्ट्रिंग, end := खाली स्ट्रिंग
character := ASCII of('a')
जब character <= ASCII of('z'), करें
यदि count[character] AND 1 शून्येतर है, तो
mid := character
count[character] := count[character] - 1
character := character - 1
अन्यथा,
i के लिए 0 से count[character]/2 (पूर्णांक विभाजन) की सीमा में, करें
begin := begin + character from (character)
character := character + 1
end := begin
end := end उल्टा करें
begin concatenate character from (mid) concatenate end वापस करें
उदाहरण
बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
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