
1332 删除回文子序列(分析)
发布日期:2021-05-07 21:51:58
浏览次数:24
分类:精选文章
本文共 1931 字,大约阅读时间需要 6 分钟。
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"。 示例 4:输入:s = ""
输出:0提示:
0 <= s.length <= 1000
s 仅包含字母 'a' 和 'b'来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-palindromic-subsequences2. 思路分析:
这道题目主要是需要理解清楚题目,理解清楚之后其实还是很简单的,一开始的做法是傻傻的模拟整个的过程,尝试删除其中的字符,其实题目中已经明确告诉了是子序列所以我们可以第一次检查整个字符串是否是回文串假如是回文串那么直接返回1,如何不是说明需要两次进行删除,第一次删除所有的a,第二次删除所有的b
3. 代码如下:
模拟代码:
class Solution { public int removePalindromeSub(String s) { int res = 0; while (s.length() > 0){ StringBuilder sb = new StringBuilder(s); if (s.equals(sb.reverse().toString())) return ++res; for (int i = 1; i < s.length(); ++i){ String t = s.substring(0, i); int len = getlen(t); String t2 = s.substring(i); int len2 = getlen(t2); if (len < 0) { s = t2; break; } else if (len2 < 0){ s = t; break; } s = t.length() > t2.length() ? t : t2; } ++res; } return res; } private static int getlen(String t) { for (int i = 0, j = t.length() - 1; i < t.length() / 2; ++i, --j){ if (t.charAt(i) != t.charAt(j)) return -1; } return t.length(); }}
优化代码:
class Solution { public int removePalindromeSub(String s) { StringBuilder sb = new StringBuilder(s); if (s.equals("")) return 0; if (s.toString().equals(sb.reverse().toString())) return 1; return 2; }}
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月03日 05时26分26秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Nginx---惊群
2019-03-05
2种解法 - 获取一条直线上最多的点数
2019-03-05
项目中常用的审计类型概述
2019-03-05
nodeName与tagName的区别
2019-03-05
(九)实现页面底部购物车的样式
2019-03-05
python-day3 for语句完整使用
2019-03-05
linux下远程上传命令scp
2019-03-05
可重入和不可重入函数
2019-03-05
(2.1)关系模型之关系结构和约束
2019-03-05
androidstudio同步的时候下载jcenter的库出错解决办法
2019-03-05
ButterKnife使用问题
2019-03-05
java基础--继承
2019-03-05
按位与、或、非、异或总结
2019-03-05
01 背包问题
2019-03-05
ILI9341几个重要的命令
2019-03-05
springboot通过控制层跳转页面404
2019-03-05
idea2020 没有 tomcat server
2019-03-05
为什么讨厌所谓仿生AI的说法
2019-03-05