मान लीजिए कि हमारे पास एक स्ट्रिंग है; हमें सबसे लंबा पैलिंड्रोम ढूंढना है जो स्ट्रिंग से वर्णों को हटाकर या फेरबदल करके उत्पन्न किया जा सकता है। और अगर एक से अधिक पलिंड्रोम हैं तो केवल एक ही लौटाएं।
इसलिए, यदि इनपुट 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
-
-
अन्यथा,
-
मैं के लिए 0 रेंज में [कैरेक्टर] / 2 (पूर्णांक विभाजन) गिनने के लिए, करो
-
प्रारंभ:=प्रारंभ + वर्ण से (चरित्र)
-
-
-
कैरेक्टर :=कैरेक्टर + 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