📖本篇内容:1332. 删除回文子序列
📑 文章专栏:leetcode每日一题《打卡日常》
📆 最近更新:2022年1月20日 leetcode每日一题2029. 石子游戏 IX 博弈相对论 不战而屈人之兵
🙊个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)
🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 关爱程序猿,从你我做起
🙊写在前面🙊
哇咔咔小付来了哦~一觉睡到十点半,被老哥的电话吵醒了去接人。接完人回来都差不多十一点半了,才开始写今天的简单题题解,说简单吧,真的不简单,如果你读不懂题这题你可以直接说拜拜了,如果说难吧,也不难,就是一个简单的双指针应用问题,快速辨别是否为回文串,来看看这道有趣的题吧!
题目
- 删除回文子序列
给你一个字符串 s,它仅由字母 ‘a’ 和 ‘b’ 组成。每一次删除操作都可以从 s 中删除一个
回文子序列。
返回删除给定字符串中所有字符(字符串为空)的最小删除次数。
「子序列」定义:如果一个字符串可以通过删除原字符串某些字符而不改变原字符顺序得到,那么这个字符串就是原字符串的一个子序列。
「回文」定义:如果一个字符串向后和向前读是一致的,那么这个字符串就是一个回文。
示例
示例1:
输入:s = "ababa"
输出:1
解释:字符串本身就是回文序列,只需要删除一次。
示例2:
输入:s = "abb"
输出:2
解释:"abb" -> "bb" -> "".
先删除回文子序列 "a",然后再删除 "bb"。
示例3:
输入:s = "baabb"
输出:2
解释:"baabb" -> "b" -> "".
先删除回文子序列 "baab",然后再删除 "b"。
提示
1 <= s.length <= 1000
s 仅包含字母 'a' 和 'b'
📝思路📝
字符串只为a和b组成,且每次都需要删除回文子序列:
如果当前情况为 示例1时 可知 我们 如果是字符串s 为 "abababb"我们可以先删除字符串(ababa)这个回文子序列,再删除bb这个回文子序列,本题难点在于理解题目意思,并且将其回文子序列进行删除,可以利用双指针来遍历该字符串s是否为回文子序列如果是的话只需要删除一次即可,反之则需要删除两次才可以删除完。
⭐代码实现⭐
class Solution {
public int removePalindromeSub(String s) {
int i = 0;
int j = s.length()-1;
//利用双指针遍历其是否为回文子序列。
while (i < j && s.charAt(i) == s.charAt(j)){
i++;
j--;
}
//如果能得知该字符串为回文子序列即i=j 则只需要删除一次反之就需要删除两次才能删完
return i<j? 2:1;
}
}
运行结果

🙊写在最后🙊
2022-1-22 今天小付打卡了哦~
美好的日出 美好的山河
都因有你存在 而璀璨 耀眼
最后
每天进步点 每天收获点
愿诸君 事业有成 学有所获
如果觉得不错 别忘啦一键三连哦~
本文介绍了一种通过双指针法高效解决LeetCode上『删除回文子序列』问题的方法。针对只包含字符'a'和'b'的字符串,讨论如何找到最小删除次数使字符串清空。文中提供了清晰的思路解析及简洁的Java代码实现。

被折叠的 条评论
为什么被折叠?



