百练 05 切割回文

总时间限制: 内存限制:
1000ms 65536kB

描述

阿福最近对回文串产生了非常浓厚的兴趣。

如果一个字符串从左往右看和从右往左看完全相同的话,那么就认为这个串是一个回文串。例如,“abcaacba”是一个回文串,“abcaaba”则不是一个回文串。

阿福现在强迫症发作,看到什么字符串都想要把它变成回文的。阿福可以通过切割字符串,使得切割完之后得到的子串都是回文的。

现在阿福想知道他最少切割多少次就可以达到目的。例如,对于字符串“abaacca”,最少切割一次,就可以得到“aba”和“acca”这两个回文子串。

输入

输入的第一行是一个整数 T (T <= 20) ,表示一共有 T 组数据。
接下来的 T 行,每一行都包含了一个长度不超过的 1000 的字符串,且字符串只包含了小写字母。

输出

对于每组数据,输出一行。该行包含一个整数,表示阿福最少切割的次数,使得切割完得到的子串都是回文的。

样例输入

3
abaacca
abcd
abcba

样例输出

1
3
0

提示

  • 对于第一组样例,阿福最少切割 1 次,将原串切割为“aba”和“acca”两个回文子串。

  • 对于第二组样例,阿福最少切割 3 次,将原串切割为“a”、“b”、“c”、“d”这四个回文子串。

  • 对于第三组样例,阿福不需要切割,原串本身就是一个回文串。

状态

dp(i)为前i个字符的最少回文切割数。

状态转移方程

dp(i)={0,min(dp(j)+1,dp(i)) if 前i个字符是回文串 if j+1…i是回文串且j从1到i−1

dp(i) = \begin{cases} 0, & \mbox{ if } 前i个字符是回文串 \\ min(dp(j) + 1, dp(i)) & \mbox{ if } j+1 \dots i 是回文串 且 j从1到i-1 \end{cases}

初始化条件

01 for i <- 1 to n
02  dp[i] <- i - 1
#include <iostream>
#include <string>using namespace std;string s;
bool isPlalindrome(int start, int ed) {for(int i = start; i <= (start + ed) / 2; i++) {if(s[i] != s[ed - (i - start + 1) + 1]) {return false;}}return true;
}int main() {int T;cin >> T;while(T--) {cin >> s;int len = s.length();// dp(i)表示前i个字符的最少回文切割数int dp[len + 1];// dp(i)初始化为i-1次切割数for(int i = 1;i <= len; i++) {dp[i] = i - 1;}for(int i = 1; i <= len; i++) {if(isPlalindrome(0, i - 1)) {dp[i] = 0;continue;}for(int j = 1; j < i; j++) {if(isPlalindrome(j + 1 - 1, i - 1)) {dp[i] = min(dp[i], dp[j] + 1);}}}cout << dp[len] << endl;}return 0;
}

百练 05 切割回文相关推荐

  1. 1.13 编程基础之综合应用 05 素数回文数的个数 python

    http://noi.openjudge.cn/ch0113/05/ """ 1.13 编程基础之综合应用 05 素数回文数的个数 http://noi.openjudg ...

  2. Bailian4122 切割回文【DP】

    4122:切割回文 总时间限制: 1000ms 内存限制: 65536kB 描述 阿福最近对回文串产生了非常浓厚的兴趣. 如果一个字符串从左往右看和从右往左看完全相同的话,那么就认为这个串是一个回文串 ...

  3. ACM: 百练NOI——基本算法之动态规划

    文章目录 Maximum sum(求两个不重叠子区间最大和) Post Office(感觉题解有问题) 最长上升子序列 最大子矩阵 采药(0-1背包) 最长公共子序列 吃糖果 登山 最长公共上升子序列 ...

  4. 每日一练——回文链表

    作者:~小明学编程 文章专栏:每日一练--Java 格言:目之所及皆为回忆,心之所想皆为过往 回文链表 链接 234. 回文链表 - 力扣(LeetCode) 题目简介: 给你一个单链表的头节点 he ...

  5. DP之钢管切割,最长回文字符串,最长公共子串

    在做LeetCode第3题的时候,用到了DP,但是自己对DP还是不了解,所以翻开算法导论,开始看动态规划喽,学好动态规划,走遍天下都不怕. 钢管切割 对于一根长n米的钢管,每个长度的价格不一样,对于长 ...

  6. 进来看很有趣,用JavaScript打印乘法口诀表 用JavaScript打印加法口诀表 用JavaScript打印菱形 用JavaScript判断是否为回文 用JavaScript解决百只鸡的问题

    每次浪漫主义 [4K超清]五月天<后来的我们>线上版 Mayday Fly TO 2021 希望大家能好好珍惜你身边的那个她,别等失去了才后悔莫及. JavaScript 用JavaScr ...

  7. 蓝桥杯C/C++每日一练之回文数

    第十三届蓝桥杯大赛个人赛省赛比赛将于2022年4月9日(星期六)举办,趁现在寒假的时间抓紧时间备战一下.因为博主本人报名是C/C++组,所以更新所有内容都是C/C++相关知识.题目全部都是蓝桥杯官网题 ...

  8. LeetCode 05最长回文子串

    题目描述 描述: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" ...

  9. Python每日一练-----难题唯唯诺诺,易题重拳出击?(回文数)

    ⛅不再平躺,每日一卷(day11) 目录 题目: 题目分析: 解题思路: 常规解法: 双指针解法: 题目: 给你一个整数 x ,如果 x 是一个回文整数,返回 true :否则,返回 false . ...

最新文章

  1. LINUX下SVN命令大全
  2. SpringBoot直接访问图片资源
  3. 真分数c语言,C语言列出真分数序列代码及解析
  4. 事件标志组的删除与状态查询
  5. 巧断梯度:单个loss实现GAN模型(附开源代码)
  6. 技术动态 | 知识图谱的策展
  7. python3解释器执行'abcdd'.endswith('cd')的结果是___python3解释器执行for x
  8. 华为云联合HarmonyOS发布智联生活行业加速器
  9. linux pxe安装视频,Linux—图解PXE实现全自动安装系统(1)
  10. CEPH RGW集群和bucket的zone group 不一致导致的404异常解决 及 使用radosgw-admin metadata 命令设置bucket metadata 的方法
  11. u-boot之添加一块新板子的支持
  12. STM32自学笔记-8-红外遥控
  13. wx.login 和 wx.getUserProfile 同时使用问题
  14. laravel数据填充seeder
  15. 关于阿里云的一键部署工具【飞流】的使用(详细)
  16. 游戏灰黑产离我们有多近
  17. 360浏览器html位置,360浏览器的默认安装路径在哪里
  18. 古籍、中国通史、诗经、辞、、四书五经、诸子百家、四大名著、唐诗、宋词、明清小说、四库全书
  19. NFT - 2022年科技圈新宠
  20. 【SSD测试专题四】Performance

热门文章

  1. 【Python爬虫】Request库入门
  2. 标称型数据和数值型数据_统计信息中的数据类型-标称,有序,间隔和比率数据类型,并举例说明
  3. JavaScript的call,apply和bind方法之间的区别
  4. python获取字典长度_python字典操作
  5. matlab中最接近零的数值
  6. 昨晚停网后,我写了一段Python代码破解了隔壁小姐姐的wifi密码
  7. 线性映射和线性变换的区别
  8. android图片异步加载解决步骤
  9. Image:介绍一些跟图片有关的控件,如图片展示特效,图片生产,图片保护等
  10. google地图 反向地址解析(地址查询)