📖本篇内容: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 今天小付打卡了哦~
美好的日出 美好的山河
都因有你存在 而璀璨 耀眼
最后
每天进步点 每天收获点
愿诸君 事业有成 学有所获
如果觉得不错 别忘啦一键三连哦~