Break a Palindrome

Given a palindromic string palindrome, replace exactly one character by any lowercase English letter so that the string becomes the lexicographically smallest possible string that isn't a palindrome.
After doing so, return the final string.  If there is no way to do so, return the empty string.

Example 1:

Input: palindrome = "abccba"
Output: "aaccba"

Approach

Java

public class BreakPalindrome {
    public static void main(String[] args) {
        String palindrome = "abccba";
        System.out.println(breakPalindrome(palindrome));
    }

    // function to check for
    // palindrome string
    static boolean isPalindrome(char[] s) {
        int low = 0, high = s.length - 1;
        while (low < high) {
            if (s[low] != s[high])
                return false;
            low++;
            high--;
        }
        return true;
    }

    static String breakPalindrome(String s) {
        char sC[] = s.toCharArray();
        int i = 0;
        int n = s.length();
        if (n == 1)
            return "";
        while (i < n && sC[i] == 'a')
            i++;
        if (i == n) {
            sC[n - 1] = 'b';

        } else {
            while (true) {
                char temp = sC[i];
                sC[i] = 'a';
                if (isPalindrome(sC)) {
                    sC[i] = temp;
                    i++;
                    if (i == n) {
                        sC[i - 1] = 'b';
                        break;
                    }

                } else
                    break;
            }
        }
        return new String(sC);
    }
}

C++

#include <bits/stdc++.h>
using namespace std;

//function to check for
//palindrome string
bool isPalindrome(string s)
{
    int low=0,high=s.size()-1;
    while(low<high)
        {
            if(s[low]!=s[high])
                  return false;
            low++;
            high--;
        }
   return true;
}
string breakPalindrome(string s
{
        int i=0;
        int n=s.size();
        if(n==1)
              return "";
        while(i<n&&s[i]=='a')
              i++;
       if(i==n)
             s[n-1]='b';
        else
        {
            while(true)   
            {
            char temp=s[i];
            s[i]='a';
            if(isPalindrome(s))
            {
                s[i]=temp;
                i++;
                if(i==n)
                {
                    s[i-1]='b';
                    break;
                }
                 
            }
             else
                  break;
            }
        }
        return s;
}
int main()
{
    string palindrome = "abccba";
    cout<<breakPalindrome(palindrome);
    return 0;
}



No comments:

Post a Comment