Dada una string . Encuentre una string , 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 . Ahora bien, s + reverso(s) siempre tendrá 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