Find a palindromic string B such that given String A is a subsequense of B

Given a string A. Find a string B, where B is a palindrome and A is a subsequence of B.

A subsequence of a string is a string that can be derived from it by deleting some (not necessarily consecutive) characters without changing the order of the remaining characters. For example, “cotst” is a subsequence of “contest”.

A palindrome is a string that reads the same forward or backward.

Examples:

Input : A = "aba"
Output : B = aba
Explanation : "aba" is a subsequence of "aba" 
which is a palindrome.

Input : A = "ab"
Output : B = abba

Approach: Let reverse(s) be the reverse of a string s. Now, s + reverse(s) will always have s as a subsequence (as first half) and it is a palindrome.

Therefore, B = A + reverse(A).

Below is the implementation of the above approach:

Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find a palindromic string B
// such that given String A is a subsequense of B
  
class GFG 
{
  
    // Function to check if a string is palindrome
    static boolean checkPalindrome(String s) 
    {
        // Reversing a string
        String x = reverse(s);
          
        // check if reversed string is equal 
        // to given string
        return x.equals(s);
    }
      
    // Function to find a palindromic string B
    // such that given String A is a subsequense of B
    static String findStringB(String A) 
    {
  
        // Reversing the string A
        String B = reverse(A);
        B = B + A;
  
        // If the string A is already a palindrome
        // return A
        if (checkPalindrome(A)) 
        {
            return A;
        }
  
        // else return B 
        return B;
    }
  
    static String reverse(String input)
    {
        char[] temparray = input.toCharArray();
        int left, right = 0;
        right = temparray.length - 1;
  
        for (left = 0; left < right; left++, right--) 
        {
            // Swap values of left and right 
            char temp = temparray[left];
            temparray[left] = temparray[right];
            temparray[right] = temp;
        }
        return String.valueOf(temparray);
    }
      
    // Driver Code
    public static void main(String[] args) 
    {
        String A = "ab";
        System.out.println(findStringB(A));
    }
}
  
// This code contributed by Rajput-Ji

chevron_right


Python

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python program to find a palindromic string B
# such that given String A is a subsequense of B
  
# Function to check if a string is palindrome
def checkPalindrome(s):
    # Reversing a string
    x = s[::-1]
    # check if reversed string is equal 
    # to given string
    if(x == s):
        return True
    else:
        return False
          
# Function to find a palindromic string B
# such that given String A is a subsequense of B
def findStringB(A):
      
    # Reversing the string A
    B = A[::-1]
      
    B = B + A
      
    # If the string A is already a palindrome
    # return A
    if(checkPalindrome(A)):
        return A
        
    # else return B    
    return B
  
# Driver Code
A ="ab"
print(findStringB(A))

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find a palindromic string B
// such that given String A is a subsequense of B
using System;
  
class GFG 
{
   
    // Function to check if a string is palindrome
    static bool checkPalindrome(String s) 
    {
        // Reversing a string
        String x = reverse(s);
           
        // check if reversed string is equal 
        // to given string
        return x.Equals(s);
    }
       
    // Function to find a palindromic string B
    // such that given String A is a subsequense of B
    static String findStringB(String A) 
    {
   
        // Reversing the string A
        String B = reverse(A);
        B = B + A;
   
        // If the string A is already a palindrome
        // return A
        if (checkPalindrome(A)) 
        {
            return A;
        }
   
        // else return B 
        return B;
    }
   
    static String reverse(String input)
    {
        char[] temparray = input.ToCharArray();
        int left, right = 0;
        right = temparray.Length - 1;
   
        for (left = 0; left < right; left++, right--) 
        {
            // Swap values of left and right 
            char temp = temparray[left];
            temparray[left] = temparray[right];
            temparray[right] = temp;
        }
        return String.Join("",temparray);
    }
       
    // Driver Code
    public static void Main(String[] args) 
    {
        String A = "ab";
        Console.WriteLine(findStringB(A));
    }
}
  
// This code has been contributed by 29AjayKumar

chevron_right


Output:

baab


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : Rajput-Ji, 29AjayKumar