由于只有 a 和 b 两个字符。其实最多的消除次数就是 2。因为我们无论如何都可以先消除全部的 1 再消除全部的 2(先消除 2 也一样),这样只需要两次即可完成。 我们再看一下题目给的一次消除的情况,题目给的例子是“ababa”,我们发现其实它本身就是一个回文串,所以才可以一次全部消除。那么思路就有了:
如果 s 是回文,则我们需要一次消除
否则需要两次
一定要注意特殊情况, 对于空字符串,我们需要 0 次
代码
代码支持:Python3
Python3 Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
classSolution: defremovePalindromeSub(self, s: str) -> int: if s == '': return0 defisPalindrome(s): l = 0 r = len(s) - 1 while l < r: if s[l] != s[r]: returnFalse l += 1 r -= 1 returnTrue return1if isPalindrome(s) else2
如果你觉得判断回文不是本题重点,也可以简单实现:
Python3 Code:
1 2 3 4 5
classSolution: defremovePalindromeSub(self, s: str) -> int: if s == '': return0 return1if s == s[::-1] else2