Construct lexicographically smallest palindrome

• Difficulty Level : Basic
• Last Updated : 27 Jul, 2022

Given a string of lowercase alphabets. Some of characters of given string got corrupted and are now represented by *. We can replace * with any of lowercase alphabets. You have to construct lexicographically smallest palindrome string. If it is not possible to construct a palindrome print “Not Possible”.

Examples:

```Input : str[] = "bc*b"
Output : bccb

Input : str[] = "bc*a*cb"
Output : bcaaacb

Input : str[] = "bac*cb"
Output : Not Possible```

Start traversing the string from both end. Say with i=0, j=strlen-1, keep increasing i and decreasing j after every single iteration till i exceeds j. Now at any intermediate position we have five possible case :

1. str[i] and str[j] both are same and also not equal to ‘*’. In this case simply continue.
2. str[i] and str[j] both are same and are equal to ‘*’. Here you must fill str[i] = str[j] = ‘a’ for smallest possible palindrome.
3. str[i] equals to ‘*’ and str[j] is some alphabet. Here fill str[i] = str[j] to make our string a palindrome.
4. str[j] equals to ‘*’ and str[i] is some alphabet. Here fill str[j] = str[i] to make our string a palindrome.
5. str[i] is not equals to str[j] and also both are some alphabet. In this case palindrome construction is not possible. So, print “Not Possible” and break from loop.

After i exceeds j means we have got our required palindrome. Else we got “Not possible” as result.

Implementation:

C++

 `// CPP for constructing smallest palindrome``#include ``using` `namespace` `std;` `// function for printing palindrome``string constructPalin(string str, ``int` `len)``{``    ``int` `i = 0, j = len - 1;` `    ``// iterate till i

Java

 `// Java for constructing smallest palindrome``class` `GFG``{` `// function for printing palindrome``static` `String constructPalin(``char` `[]str, ``int` `len)``{``    ``int` `i = ``0``, j = len - ``1``;` `    ``// iterate till i

Python3

 `# Python3 for constructing smallest palindrome` `# function for printing palindrome``def` `constructPalin(string, l):``    ``string ``=` `list``(string)``    ``i ``=` `-``1``    ``j ``=` `l``    ` `    ``# iterate till i

C#

 `// C# for constructing smallest palindrome``using` `System;` `class` `GFG``{` `// function for printing palindrome``static` `String constructPalin(``char` `[]str, ``int` `len)``{``    ``int` `i = 0, j = len - 1;` `    ``// iterate till i

PHP

 ``

Javascript

 ``

Output

`bcacxcacb`

Time Complexity: O(n)
Auxiliary Space: O(1)

This article is contributed by Aarti_Rathi. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

My Personal Notes arrow_drop_up