Related Articles
Make a string non-palindromic by inserting a given character
• Difficulty Level : Expert
• Last Updated : 14 May, 2021

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:

1. If the count of character X in the string S is the same as the length of the string S, then print “-1”.
2. 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 ``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

 ``

Output:

`sgeek`

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

My Personal Notes arrow_drop_up