开启我的LeetCode刷题日记:1332. 删除回文子序列

136 阅读2分钟

「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战

编程世界总是离不了算法

最近在看框架源码时,会有很多算法的实现逻辑,有时候会感到吃力

于是决定蹭着假期,加强算法和数据结构相关的知识

那怎么提升呢?

其实我知道算法这东西没有捷径,多写多练才能提升,于是我开启我的LeetCode刷题之旅

第一阶段目标是:200道,每天12

为了不乱,本系列文章目录分为三部分:

  1. 今日题目:xxx
  2. 我的思路
  3. 代码实现

今天题目:1332. 删除回文子序列

难度:简单

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

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

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

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

 

我的思路

注意子序列的定义并非要求连续的序列,且s中只包含字符a和b。因此

  1. 若字符串s本身是空字符串,则删除零次。
  2. 当且仅当字符串s本身即是回文序列,则只需要删除一次。
  3. 最坏情况:最小删除次数为两次,即一次删除全部的a加上一次删除全部的b。

代码实现

/**
 * @param {string} s
 * @return {number}
 */
var removePalindromeSub = function(s) {
//若字符串s本身是空字符串,则删除零次。
    if(s==""){
        return 0;
    }
    for(let i=0,j=s.length-1;i<j;i++,j--){
        if(s[i] == s[j]){
            continue;
        }
        else
            return 2;
    }
    //当且仅当字符串s本身即是回文序列,则只需要删除一次。
    return 1;
};

总结

实现方式其实有很多,这里仅供参考~

由于刚开始刷题,也不知道从哪里刷好,如果前辈们有好的建议,希望不吝赐教,感谢🌹