Problem
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 anempty 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'
.
Examples
Example 1
|
|
Example 2
|
|
Constraints
1 <= palindrome.length <= 1000
palindrome
consists of only lowercase English letters.
Solution
Method 1 – Greedy Replacement
Intuition
To make the palindrome not a palindrome and lexicographically smallest, change the first non-‘a’ character in the first half to ‘a’. If all are ‘a’, change the last character to ‘b’.
Approach
- If the string length is 1, return “”.
- For each character in the first half, if it is not ‘a’, replace it with ‘a’ and return.
- If all are ‘a’, change the last character to ‘b’.
Code
|
|
|
|
Complexity
- ⏰ Time complexity:
O(n)
- 🧺 Space complexity:
O(n)