All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g1301_1400.s1328_break_a_palindrome.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g1301_1400.s1328_break_a_palindrome;

// #Medium #String #Greedy #2022_03_19_Time_0_ms_(100.00%)_Space_42.3_MB_(21.67%)

/**
 * 1328 - Break a Palindrome\.
 *
 * Medium
 *
 * Given a palindromic string of lowercase English letters `palindrome`, replace **exactly one** character with any lowercase English letter so that the resulting string is **not** a palindrome and that it is the **lexicographically smallest** one possible.
 *
 * Return _the resulting string. If there is no way to replace a character to make it not a palindrome, return an **empty string**._
 *
 * A string `a` is lexicographically smaller than a string `b` (of the same length) if in the first position where `a` and `b` differ, `a` has a character strictly smaller than the corresponding character in `b`. For example, `"abcc"` is lexicographically smaller than `"abcd"` because the first position they differ is at the fourth character, and `'c'` is smaller than `'d'`.
 *
 * **Example 1:**
 *
 * **Input:** palindrome = "abccba"
 *
 * **Output:** "aaccba"
 *
 * **Explanation:** There are many ways to make "abccba" not a palindrome, such as "zbccba", "aaccba", and "abacba". Of all the ways, "aaccba" is the lexicographically smallest.
 *
 * **Example 2:**
 *
 * **Input:** palindrome = "a"
 *
 * **Output:** ""
 *
 * **Explanation:** There is no way to replace a single character to make "a" not a palindrome, so return an empty string.
 *
 * **Constraints:**
 *
 * *   `1 <= palindrome.length <= 1000`
 * *   `palindrome` consists of only lowercase English letters.
**/
public class Solution {
    public String breakPalindrome(String palindrome) {
        if (palindrome.length() <= 1) {
            return "";
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < palindrome.length(); i++) {
            char ch = palindrome.charAt(i);
            if (ch != 'a' && i != palindrome.length() - 1 - i) {
                sb.append('a');
                sb.append(palindrome.substring(i + 1));
                return sb.toString();
            } else {
                sb.append(ch);
            }
        }
        sb.deleteCharAt(palindrome.length() - 1);
        sb.append('b');
        return sb.toString();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy