# 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'`.

&#x20;

**Example 1:**

<pre><code>Input: palindrome = "abccba"
<strong>Output:
</strong> "aaccba"
<strong>Explanation:
</strong> 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.
</code></pre>

**Example 2:**

<pre><code>Input: palindrome = "a"
<strong>Output:
</strong> ""
<strong>Explanation:
</strong> There is no way to replace a single character to make "a" not a palindrome, so return an empty string.
</code></pre>

&#x20;

**Constraints:**

* `1 <= palindrome.length <= 1000`
* `palindrome` consists of only lowercase English letters.

```python
class Solution:
    def breakPalindrome(self, palindrome: str) -> str:
        length = len(palindrome)
        for index in range(length // 2):
            if palindrome[index] != 'a':
                return palindrome[:index] + 'a' + palindrome[index+1:]
        return palindrome[:-1] + "b" if length > 1 else ""
```
