前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python|删除回文子序列

Python|删除回文子序列

作者头像
算法与编程之美
发布2020-06-24 11:15:17
9160
发布2020-06-24 11:15:17
举报

问题描述

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

解决方案

这道题其实很简单,最大的问题就是读题。

题中要求的是子序列,但平常做题基本都是子串,而且题目中的示例删除的都是子串,很容易误导我们。

回文子序列和回文子串的区别是:子串是字符串中连续的一个序列,而子序列是字符串中保持相对位置的字符序列,例如,"aaa"可以是字符串"aaba"的子序列但不是子串。简单的说就是子串必须连续,子序列不一定连续。

这样的话这道题就很简单,简单分析一下:次数最多就是2,因为只有a和b,那么我们最多,第一次删除一个,第二次删除另一个。另外就是本身就是回文串,那就删一次,本身是空的,就不用删。

题目代码:

class Solution: def removePalindromeSub(self, s: str) -> int: if s == '': return 0 elif s == s[::-1]: return 1 return 2

END

主 编 | 王文星

责 编 | 周茂林

where2go 团队

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档