zoukankan      html  css  js  c++  java
  • LeetCode --- 字符串系列 --- 删除回文子序列

    删除回文子序列

    备注

    又是脑筋急转弯的题 --- 心累

    (想了半天解法,最后是方向错了,简直要原地爆炸)


    题目

    给你一个字符串 s,它仅由字母 'a' 和 'b' 组成。

    每一次删除操作都可以从 s 中删除一个回文 子序列。

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

    「子序列」定义:

    如果一个字符串可以通过 删除原字符串某些字符而不改变原字符顺序 得到

    那么这个字符串就是原字符串的一个子序列。

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


    示例

    示例 1:
    
    输入:s = "ababa"
    输出:1
    解释:字符串本身就是回文序列,只需要删除一次。
    
    示例 2:
    
    输入:s = "abb"
    输出:2
    解释:"abb" -> "bb" -> "". 
    先删除回文子序列 "a",然后再删除 "bb"。
    
    示例 3:
    
    输入:s = "baabb"
    输出:2
    解释:"baabb" -> "b" -> "". 
    先删除回文子序列 "baab",然后再删除 "b"。
    
    示例 4:
    
    输入:s = ""
    输出:0
    

    来源:力扣(LeetCode)

    链接:https://leetcode-cn.com/problems/remove-palindromic-subsequences

    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


    解题思路

    
    1、若字符串为空,则删除次数为 0
    2、单个字符,删除次数为 1
    3、若整个字符串本身就是回文,则删除次数为 1
    4、
    若字符串不等于 0,也不是回文串
    在 `原字符串` 中提取所有的 `a` 可以组成都是 `a` 的字符串, 该字符串是回文,并且满足 `子序列` 的定义
    因为 `原字符串` 仅由字符 `a、b` 组成,那么最少删掉字符串的次数,就是先删除 `a` ,再删除 `b` ,即 2 次
    
    重点在于理解 `子序列` 的定义: 
    `删除原字符串某些字符而不改变原字符顺序` 可以理解为 `可以删除不相连的字符`
    

    题解

    let removePalindromeSub = function(s) {
        // 若字符串为空,则删除次数为 0
        if (s === '') return 0
        // 单个字符,删除次数为 1
        if (s.length === 1) return 1
        // 若整个字符串本身就是回文,则删除次数为 1
        if (s === s.split('').reverse().join('')) return 1
    
        // 若字符串不等于 0,也不是回文串
        // 在 原字符串 中提取所有的 a 可以组成都是 a 的字符串, 该字符串是回文,并且满足子序列的定义
        // 因为 原字符串 仅由字符 a b 组成,那么最少删掉字符串的次数,就是先删除 a,再删除 b,即 2 次
        return 2
    };
    

  • 相关阅读:
    5分钟了解为什么学习Go
    jieba gensim 相似度实现
    functiils.lru_cache缩短递归时间
    python深浅copy和赋值
    ajax上传文件 基于jquery form表单上传文件
    form组件类 钩子函数验证
    基于jquery读取input上传的文件内容
    MongonDB指令汇总
    冥想编程
    《如何阅读一本书》读书笔记
  • 原文地址:https://www.cnblogs.com/linjunfu/p/12764400.html
Copyright © 2011-2022 走看看