持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情。
题目描述
给你一个字符串 s,它仅由字母 'a' 和 'b' 组成。每一次删除操作都可以从 s 中删除一个回文 子序列。
返回删除给定字符串中所有字符(字符串为空)的最小删除次数。
「子序列」定义:如果一个字符串可以通过删除原字符串某些字符而不改变原字符顺序得到,那么这个字符串就是原字符串的一个子序列。
「回文」定义:如果一个字符串向后和向前读是一致的,那么这个字符串就是一个回文。
来源:力扣(LeetCode)
- 示例1
输入: s = "ababa"
输出: 1
解释: 字符串本身就是回文序列,只需要删除一次。
- 示例2
输入: s = "abb"
输出: 2
解释: "abb" -> "bb" -> "".
先删除回文子序列 "a",然后再删除 "bb"。
- 示例3
输入: s = "baabb"
输出: 2
解释: "baabb" -> "b" -> "".
先删除回文子序列 "baab",然后再删除 "b"。
提示:
1 <= s.length <= 1000s仅包含字母'a'和'b'
思路分析
从题意上得知,字符串本身就只有字母‘a’和‘b’,绝不存在其他字母或者字符;每次的删除操作都可以从原字符中删除一个回文子序列,直至删除到字符串变成空字符串的时候,就返回删除这个字符串的最小次数。由于字符串只有两种不同的字母,相同的字母组成的子序列一定是回文子序列,所以呢,给出的字符串最多最多也就只能删除两次而已。能出现的情况会是这样两种情况,第一种,若本身是回文字符串,那么久只需要删除一次就可以了,比如例题中的第一题;第二种呢,就是字符串本事不是回文字符串,可以吧所有的'a'字符串拼成一个序列,'b'拼成一个序列,他们也是回文的,这种最多也就是需要两次。
AC代码