Welcome to Subscribe On Youtube
1328. Break a Palindrome
Description
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.
Solutions
-
class Solution { public String breakPalindrome(String palindrome) { int n = palindrome.length(); if (n == 1) { return ""; } char[] cs = palindrome.toCharArray(); int i = 0; while (i < n / 2 && cs[i] == 'a') { ++i; } if (i == n / 2) { cs[n - 1] = 'b'; } else { cs[i] = 'a'; } return String.valueOf(cs); } }
-
class Solution { public: string breakPalindrome(string palindrome) { int n = palindrome.size(); if (n == 1) { return ""; } int i = 0; while (i < n / 2 && palindrome[i] == 'a') { ++i; } if (i == n / 2) { palindrome[n - 1] = 'b'; } else { palindrome[i] = 'a'; } return palindrome; } };
-
class Solution: def breakPalindrome(self, palindrome: str) -> str: n = len(palindrome) if n == 1: return "" s = list(palindrome) i = 0 while i < n // 2 and s[i] == "a": i += 1 if i == n // 2: s[-1] = "b" else: s[i] = "a" return "".join(s)
-
func breakPalindrome(palindrome string) string { n := len(palindrome) if n == 1 { return "" } i := 0 s := []byte(palindrome) for i < n/2 && s[i] == 'a' { i++ } if i == n/2 { s[n-1] = 'b' } else { s[i] = 'a' } return string(s) }
-
function breakPalindrome(palindrome: string): string { const n = palindrome.length; if (n === 1) { return ''; } const s = palindrome.split(''); let i = 0; while (i < n >> 1 && s[i] === 'a') { i++; } if (i == n >> 1) { s[n - 1] = 'b'; } else { s[i] = 'a'; } return s.join(''); }