[leetcode] 1328. Break a Palindrome

Description

Given a palindromic string palindrome, replace exactly one character by any lowercase English letter so that the string becomes the lexicographically smallest possible string that isn’t a palindrome.

After doing so, return the final string. If there is no way to do so, return the empty string.

Example 1:

Input: palindrome = "abccba"
Output: "aaccba"

Example 2:

Input: palindrome = "a"
Output: ""

Constraints:

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

分析

题目的意思是:给定一个回文子串,然后改变一个字母使其不再构成回文子串。我没做出来,这道题技巧挺多的,比如把遍历到中间位置过程中第一个不等于a的位置变成a就行了;还有一种情况是全a的情况,这时候只需要把字符串最后一个变成b就行了;再就是如果只有一个字符的情况,直接返回空就行了。不要问我规律是怎么得来的,我也是看了答案,哈哈哈。

代码

class Solution:
    def breakPalindrome(self, palindrome: str) -> str:
        if(len(palindrome)==1):
            return ''
        first=True
        res=''
        n=len(palindrome)
        for i in range(n//2):
            if(palindrome[i]!='a'):
                return palindrome[:i]+'a'+palindrome[i+1:]
        if(palindrome[:-1]):
            return palindrome[:-1]+'b'
        return ''

参考文献

[LeetCode] [Java/C++/Python] Easy and Concise

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页