欢迎点击「算法与编程之美」↑关注咱们!
算法
本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。编程
问题描述app
给你一个字符串 s,它仅由字母 'a' 和 'b' 组成。每一次删除操做均可以从 s 中删除一个回文 子序列。spa
返回删除给定字符串中全部字符(字符串为空)的最小删除次数。.net
「子序列」定义:若是一个字符串能够经过删除原字符串某些字符而不改变原字符顺序获得,那么这个字符串就是原字符串的一个子序列。orm
「回文」定义:若是一个字符串向后和向前读是一致的,那么这个字符串就是一个回文ip
示例 1:ci
输入:s = "ababa"rem
输出:1
解释:字符串自己就是回文序列,只须要删除一次。
示例 2:
输入:s = "abb"
输出:2
解释:"abb" -> "bb" -> "".
先删除回文子序列 "a",而后再删除 "bb"。
示例 3:
输入:s = "baabb"
输出:2
解释:"baabb" -> "b" -> "".
先删除回文子序列 "baab",而后再删除 "b"。
示例 4:
输入:s = ""
输出:0
解决方案
这道题其实很简单,最大的问题就是读题。
题中要求的是子序列,但日常作题基本都是子串,并且题目中的示例删除的都是子串,很容易误导咱们。
回文子序列和回文子串的区别是:子串是字符串中连续的一个序列,而子序列是字符串中保持相对位置的字符序列,例如,"aaa"能够是字符串"aaba"的子序列但不是子串。简单的说就是子串必须连续,子序列不必定连续。
这样的话这道题就很简单,简单分析一下:次数最多就是2,由于只有a和b,那么咱们最多,第一次删除一个,第二次删除另外一个。另外就是自己就是回文串,那就删一次,自己是空的,就不用删。
题目代码:
class Solution: def removePalindromeSub(self, s: str) -> int: if s == '': return 0 elif s == s[::-1]: return 1 return 2 |
主 编 | 王文星
责 编 | 周茂林
where2go 团队
长按识别二维码关注咱们!
舒适提示:点击页面右下角“写留言”发表评论,期待您的参与!期待您的转发!
本文分享自微信公众号 - 算法与编程之美(algo_coding)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。