leetcode每日一题1332. 删除回文子序列 双指针的精妙应用——快速辨别是否为回文子序列

📖本篇内容:1332. 删除回文子序列

📑 文章专栏:leetcode每日一题《打卡日常》

📆 最近更新:2022年1月20日 leetcode每日一题2029. 石子游戏 IX 博弈相对论 不战而屈人之兵

🙊个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)

🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 关爱程序猿,从你我做起

🙊写在前面🙊

哇咔咔小付来了哦~一觉睡到十点半,被老哥的电话吵醒了去接人。接完人回来都差不多十一点半了,才开始写今天的简单题题解,说简单吧,真的不简单,如果你读不懂题这题你可以直接说拜拜了,如果说难吧,也不难,就是一个简单的双指针应用问题,快速辨别是否为回文串,来看看这道有趣的题吧!

题目

  1. 删除回文子序列

给你一个字符串 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'

📝思路📝

字符串只为ab组成,且每次都需要删除回文子序列

如果当前情况为 示例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 今天小付打卡了哦~

美好的日出 美好的山河

都因有你存在 而璀璨 耀眼

最后

每天进步点 每天收获点

愿诸君 事业有成 学有所获

如果觉得不错 别忘啦一键三连哦~

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alascanfu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值