Encuentre una string palindrómica B tal que dada la String A sea una subsecuencia de B

Dada una string  A   . Encuentre una string  B   , donde B es un palíndromo y A es una subsecuencia de B.

Una subsecuencia de una string es una string que se puede derivar de ella eliminando algunos caracteres (no necesariamente consecutivos) sin cambiar el orden de los caracteres restantes. Por ejemplo, “cotst” es una subsecuencia de “contest”.

Un palíndromo es una string que se lee igual hacia adelante o hacia atrás.

Ejemplos

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

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

Enfoque: Sea inverso(s) el reverso de una string  s   . Ahora bien, s + reverso(s) siempre tendrá  s   como subsecuencia (como primera mitad) y es un palíndromo.
Por lo tanto, B = A + inversa(A) .

A continuación se muestra la implementación del enfoque anterior:  

C++14

// C++ program to find a palindromic string B
// such that given String A is a subsequence of B
#include <bits/stdc++.h>
using namespace std;
 
// Function to check if a string is palindrome
bool checkPalindrome(string s)
{
    // Reversing a string
    string x = s;
    reverse(s.begin(), s.end());
 
    // check if reversed string is equal
    // to given string
    return s == x;
}
 
// Function to find a palindromic string B
// such that given String A is a subsequence of B
string findStringB(string A)
{
    // Reversing the string A
    string B = A;
    reverse(A.begin(), A.end());
    A = A + B;
 
    // If the string A is already a palindrome
    // return A
    if (checkPalindrome(B))
        return B;
 
    // else return B
    return A;
}
 
string reverse(string input)
{
    string temparray = input;
    int left, right = 0;
    right = temparray.length() - 1;
 
    for (left = 0; left < right; left++, right--)
 
        // Swap values of left and right
        swap(temparray[left], temparray[right]);
 
    return temparray;
}
 
// Driver Code
int main(int argc, char const *argv[])
{
    string A = "ab";
    cout << findStringB(A) << endl;
    return 0;
}
 
// This code is contributed by
// sanjeev2552

Java

// Java program to find a palindromic string B
// such that given String A is a subsequence 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 subsequence 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

Python3

# Python program to find a palindromic string B
# such that given String A is a subsequence 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 subsequence 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))

C#

// C# program to find a palindromic string B
// such that given String A is a subsequence 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 subsequence 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

Javascript

<script>
 
// Javascript program to find a palindromic string B
// such that given String A is a subsequence of B
 
// Function to check if a string is palindrome
function checkPalindrome(s)
{
     
    // Reversing a string
    let x = reverse(s);
       
    // Check if reversed string is equal
    // to given string
    return x == (s);
}
 
// Function to find a palindromic string B
// such that given String A is a subsequence of B
function findStringB(A)
{
     
    // Reversing the string A
    let 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;
}
 
function reverse(input)
{
    let temparray = input.split("");
    let left, right = 0;
    right = temparray.length - 1;
 
    for(left = 0; left < right; left++, right--)
    {
         
        // Swap values of left and right
        let temp = temparray[left];
        temparray[left] = temparray[right];
        temparray[right] = temp;
    }
    return (temparray).join("");
}
 
// Driver Code
let A = "ab";
document.write(findStringB(A));
 
// This code is contributed by rag2127
 
</script>
Producción: 

baab

 

Publicación traducida automáticamente

Artículo escrito por indrajit1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *