[10/10] 1328. Break a Palindrome
본문
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.
관련자료
-
링크
학부유학생님의 댓글
- 익명
- 작성일
Memory Usage: 13.8 MB, less than 61.62% of Python3 online submissions for Break a Palindrome.
class Solution:
def breakPalindrome(self, palindrome: str) -> str:
if len(palindrome) <= 1: return ""
palindrome = list(palindrome)
ptr = 0
while ptr < len(palindrome) and palindrome[ptr] == "a":
ptr+=1
if len(palindrome)%2 and ptr == len(palindrome)//2:
ptr+=1
if ptr < len(palindrome):
palindrome[ptr] = "a"
return "".join(palindrome)
palindrome[-1] = "b"
return "".join(palindrome)