Make a string non-palindromic by inserting a given character
Given a string S and a character X, the task is to generate a non-palindromic string by inserting the character X in the string S. If it is not possible to obtain a non-palindromic string, then print “-1”.
Examples:
Input: S = “ababab”, X = ‘a’
Output: “aababab”
Explanation: Inserting the character ‘a’ at the beginning of the string S modifies the string to “aababab”, which is non-palindromic.Input: S = “rrr”, X = ‘r’
Output: -1
Approach: The given problem can be solved based on the following observation that if the string contains only character X, then it is impossible to make the string non-palindromic. Otherwise, the string can be made non-palindromic. Follow the steps below to solve the problem:
- If the count of character X in the string S is the same as the length of the string S, then print “-1”.
- Otherwise, check if concatenations of string S and character X is palindromic or not. If found to be true, then print the string S + X. Otherwise print (X + S).
Below is the implementation of the above approach:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to check if a // string is palindromic or not bool Palindrome(string str) { // Traverse the string str for ( int i = 0, j = str.length() - 1; i < j; i++, j--) { // Check if i-th character from // both ends are the same or not if (str[i] != str[j]) return false ; } // Return true, as str is palindrome return true ; } // Function to make the non-palindromic // string by inserting the character X void NonPalindrome(string str, char X) { // If all the characters // in the string are X if (count(str.begin(), str.end(), X) == str.length()) { cout << "-1" ; return ; } // Check if X + str is // palindromic or not if (Palindrome(X + str)) cout << str + X << endl; else cout << X + str << endl; } // Driver Code int main() { string S = "geek" ; char X = 's' ; NonPalindrome(S, X); return 0; } |
Java
// java program for the above approach import java.io.*; import java.lang.*; import java.util.*; public class GFG { // Function to check if a // string is palindromic or not static boolean Palindrome(String str) { // Traverse the string str for ( int i = 0 , j = str.length() - 1 ; i < j; i++, j--) { // Check if i-th character from // both ends are the same or not if (str.charAt(i) != str.charAt(j)) return false ; } // Return true, as str is palindrome return true ; } // Function to make the non-palindromic // string by inserting the character X static void NonPalindrome(String str, char X) { // stores the count of char X in str int count = 0 ; for ( int i = 0 ; i < str.length(); i++) if (str.charAt(i) == X) count++; // If all the characters // in the string are X if (count == str.length()) { System.out.println( "-1" ); return ; } // Check if X + str is // palindromic or not if (Palindrome(X + str)) System.out.println(str + X); else System.out.println(X + str); } // Driver Code public static void main(String[] args) { String S = "geek" ; char X = 's' ; NonPalindrome(S, X); } } // This code is contributed by Kingash. |
Python3
# Python3 program for the above approach # Function to check if a # string is palindromic or not def Palindrome( str ): if str = = str [:: - 1 ]: return True # Return true, as str is palindrome return False # Function to make the non-palindromic # string by inserting the character X def NonPalindrome( str , X): # If all the characters # in the string are X if ( str .count(X) = = len ( str )): print ( "-1" ) return # Check if X + str is # palindromic or not if (Palindrome(X + str )): print ( str + X) else : print (X + str ) # Driver Code if __name__ = = '__main__' : S = "geek" X = 's' NonPalindrome(S, X) # This code is contributed by mohit kumar 29 |
C#
// C# program for the above approach using System; using System.Linq; class GFG { // Function to check if a // string is palindromic or not static bool Palindrome( string str) { // Traverse the string str for ( int i = 0, j = str.Length - 1; i < j; i++, j--) { // Check if i-th character from // both ends are the same or not if (str[i] != str[j]) return false ; } // Return true, as str is palindrome return true ; } // Function to make the non-palindromic // string by inserting the character X static void NonPalindrome( string str, char X) { // If all the characters // in the string are X if (str.Count(p => p == X) == str.Length) { Console.Write( "-1" ); return ; } // Check if X + str is // palindromic or not if (Palindrome(X + str)) Console.WriteLine(str + X); else Console.WriteLine(X + str); } // Driver Code public static void Main() { string S = "geek" ; char X = 's' ; NonPalindrome(S, X); } } // This code is contributed by ukasp. |
Javascript
<script> // javascript program for the above approach // Function to check if a // string is palindromic or not function Palindrome( str) { // Traverse the string str for (let i = 0, j = str.length - 1; i < j; i++, j--) { // Check if i-th character from // both ends are the same or not if (str.charAt(i) != str.charAt(j)) return false ; } // Return true, as str is palindrome return true ; } // Function to make the non-palindromic // string by inserting the character X function NonPalindrome( str, X) { // stores the count of char X in str var count = 0; for (let i = 0; i < str.length; i++) if (str.charAt(i) == X) count++; // If all the characters // in the string are X if (count == str.length) { document.write( "-1" ); return ; } // Check if X + str is // palindromic or not if (Palindrome(X + str)) document.write(str + X); else document.write(X + str); } // Driver Code var S = "geek" ; var X = 's' ; NonPalindrome(S, X); </script> |
Output:
sgeek
Time Complexity: O(N)
Auxiliary Space: O(1), since no extra space has been taken.
Please Login to comment...