当前位置: 首页 > news >正文

UVA11584划分成回文串 Partitioning by Palindromes

划分成回文串 Partitioning by Palindromes

题面翻译

回文子串(palind)

问题描述:

当一个字符串正序和反序是完全相同时,我们称之为“回文串”。例如“racecar”就是一个回文串,而“fastcar”就不是。现在给一个字符串s,把它分割成若干个互不相交的回文子串,求分割的回文子串的最少个数。

输入格式:

第一行为正整数t(≤10),表示数据组数;接下来t行,每行一个完全由小写字母组成的字符串,长度不超过1000。

输出格式:

对于每组数据,输出最少回文子串数。

由 @C919 提供翻译

题目描述

PDF

输入格式

输出格式

样例 #1

样例输入 #1

3
racecar
fastcar
aaadbccb

样例输出 #1

1
7
3

solution

采用动态规划的思想

初始状态为dp[i]=i+1,即一个字符串str.substr(0,i+1)最多包涵i+1一个回文串,建立状态转移方程dp[i]=min(dp[j]-1,dp[i]),其中子串str.substr(j,i-j+1)为一个回文串,dp[i]表示子串str.substr(0,i+1) 最少有回文子串的数目

#include <iostream>
#include <cstring>
#include <cstdio>#define N 10000using namespace std;bool isPalindrome(string s, int i, int j) {while (i < j) {if (s[i] != s[j]) {return false;} else {i++;j--;}}return true;
}int main() {int n;cin >> n;while (n--) {int dp[N] = {0};dp[0] = 1;string str;cin >> str;int l = str.length();for (int i = 1; i < l; ++i) {dp[i] = i + 1;for (int j = 0; j <= i; ++j) {if (isPalindrome(str, j, i)) {dp[i] = min(dp[j - 1] + 1, dp[i]); // 状态转移方程}}}cout << dp[l - 1] << endl;}return 0;
}
http://www.lryc.cn/news/239150.html

相关文章:

  • 第十一章 将对象映射到 XML - 控制流属性的映射形式
  • torchvision中的标准ResNet50网络结构
  • Java 多线程之 synchronized (互拆锁/排他锁/非观锁)
  • 开源vs闭源大模型如何塑造技术的未来?开源模型的优劣势未来发展方向
  • 如何使用无代码系统搭建软件平台?有哪些开源无代码开发平台?
  • 微信怎么设置自动回复?
  • 基于Vue3的低代码开发平台——JNPF
  • Thinkphp6 模型 指定字段自增的方法
  • WhatsApp开发客户攻略来袭!还有你不知道的账号解封秘籍!
  • Linux C 基于tcp多线程在线聊天室
  • 代码随想录算法训练营第23期day60|84.柱状图中最大的矩形
  • vue动态获取目录结构进行配置静态路由
  • 产品工程师工作的职责十篇(合集)
  • 图片降噪软件 Topaz DeNoise AI mac中文版功能
  • 【开源】基于Vue.js的车险自助理赔系统的设计和实现
  • 2023年亚太杯数学建模思路 - 案例:粒子群算法
  • Android:Google三方库之Firebase集成详细步骤(一)
  • 企业如何选择一款高效的ETL工具
  • vr编辑器可以解决教育教学中的哪些问题
  • 国外聊天IM — Sendbird
  • Django与Ajax
  • linux日志不循环问题诊断
  • Golang版本处理Skywalking Trace上报数据
  • 【开源】基于Vue和SpringBoot的教学过程管理系统
  • 【python学习】中级篇-图形界面-内置库Tkinter,用于创建图形用户界面(GUI)
  • 【开源】基于JAVA的快递管理系统
  • 伦敦银涨1%内银涨多少才能持平
  • Linux:进度条(小程序)以及git三板斧
  • CSS-表格属性(1)
  • html在线生成二维码(附源码)