(LeetCode_字符串_难度简单_1332题)_13(触及到我的只是盲区了)删除回文子序列

给你一个字符串 s,它仅由字母 'a' 和 'b' 组成。每一次删除操作都可以从 s 中删除一个回文 子序列

返回删除给定字符串中所有字符(字符串为空)的最小删除次数。

「子序列」定义:如果一个字符串可以通过删除原字符串某些字符而不改变原字符顺序得到,那么这个字符串就是原字符串的一个子序列。

「回文」定义:如果一个字符串向后和向前读是一致的,那么这个字符串就是一个回文。

 

示例 1:

输入:s = "ababa"
输出:1
解释:字符串本身就是回文序列,只需要删除一次。
示例 2:

输入:s = "abb"
输出:2
解释:"abb" -> "bb" -> "". 
先删除回文子序列 "a",然后再删除 "bb"。
示例 3:

输入:s = "baabb"
输出:2
解释:"baabb" -> "b" -> "". 
先删除回文子序列 "baab",然后再删除 "b"。
示例 4:

输入:s = ""
输出:0
 

提示:

0 <= s.length <= 1000
s 仅包含字母 'a'  和 'b'

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-palindromic-subsequences
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

学到了一个新知识:子序列

一开始是懵逼的。。。按题目意思,是要删除回文 子序列,然后再删除剩下的字符串,而且字符串只包含a,b所以只有三种情况

1.空字符串 返回 0(这里我的一个模糊区:字符串为空赋值 string str="",里面不用空格,经常忘记

2.字符串整个都是回文字符串,直接删除整个字符串,返回 1

3.字符串含有一个回文字符子串,先删回文字符子串,再删剩下的非回文子串,返回2

例子:abbbba

子序列:字符串中按序列取一部分 aa

子串: 字符串中按固定连续顺序取一部分 abbb

class Solution {
public:
    int removePalindromeSub(string s) {
      string temp = s;
      reverse(temp.begin(), temp.end() );
      if(s == "") return 0;
      if(temp == s) return 1;
      else return 2;

    }
};

 

你可能感兴趣的:(leetcode刷题)