当前位置: 首页 > 后端技术 > Python

【LeetCode日记】1332.删除回文子序列

时间:2023-03-25 20:03:40 Python

题目地址(1332.删除回文子序列)https://leetcode-cn.com/probl...题目描述返回删除给定字符串中的所有字符(Characterstringis空的)。“子序列”定义:如果一个字符串可以通过删除原字符串的某些字符而不改变原字符的顺序得到,那么这个字符串就是原字符串的子序列。“回文”定义:如果一个字符串向后和向前读取相同,则该字符串为回文。示例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<=1000s仅包含字母'a'和'b'在真实面试中遇到过这个问题吗?思路这是另一个关于“聪明”的问题。类似的题还有1297.maximum-number-of-occurrences-of-a-substring因为只有两个字符a和b。其实最大消去的次数是2,因为我们可以先消去所有的1再消去所有的2(先消去2也是一样),所以只需要进行两次即可。我们来看看标题给出的一次性淘汰情况。题目给出的例子是“ababa”。我们发现它其实是一个回文串,所以一下子就可以消掉了。那么思路就是:如果s是回文,我们需要去除一次,否则需要注意特殊情况二次。对于空字符串,我们需要0次。,s:str)->int:ifs=='':return0defisPalindrome(s):l=0r=len(s)-1whilelint:ifs=='':return0return1ifs==s[::-1]else2重点分析注意复习题,一定要用问题条件“只包含a和b两个字符”否则容易做而且很麻烦