nyoj 37 回文字符串题解
来源:互联网 发布:centos设置中文输入法 编辑:程序博客网 时间:2024/06/05 16:43
回文字符串
时间限制:3000 ms | 内存限制:65535 KB
难度:4
- 描述
- 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba"。当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串。现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串。
- 输入
- 第一行给出整数N(0<N<100)
接下来的N行,每行一个字符串,每个字符串长度不超过1000. - 输出
- 每行输出所需添加的最少字符数
- 样例输入
1Ab3bd
- 样例输出
2
设f[i][j]表示从第i个字符到第j个字符要变为回文需要添加的字符个数,由此可以得到状态转移方程为
1、str[i]==str[p]:f[i][j]=f[i+1][j-1];
2、str[i]!=str[p]:f[i][j] = min(f[i][p-1],f[i+1][p]);
代码如下:
#include <iostream>#include<cstring>using namespace std;int f[1010][1010];//f[i][j]表示从i到j要添加的最少的字符个数int main(){ int n; cin>>n; while(n--) { char str[1010]; cin>>str; int i,j,k,len = strlen(str); for(i=0;i<len;i++) f[i][i] = 0; for(k=2;k<=len;k++) { for(i=0;i<=len-k;i++) { int p = i+k-1; if(str[i] == str[p]) { f[i][p] = f[i+1][p-1]; } else { f[i][p] = min(f[i+1][p],f[i][p-1])+1; } } } cout<<f[0][len-1]<<endl; memset(f,0,sizeof(f)); } return 0;}
0 0
- nyoj 37 回文字符串题解
- nyoj 回文字符串题解
- NYOJ 37 回文字符串
- nyoj 37 回文字符串
- nyoj-37-回文字符串
- nyoj 37 回文字符串
- NYOJ 37 回文字符串
- 回文字符串(nyoj 37)
- Nyoj 37 回文字符串
- Nyoj 37 回文字符串
- NYOJ 37 回文字符串
- nyoj-37 回文字符串
- NYOJ 37 回文字符串
- NYOJ 37 回文字符串
- NYOJ 37 回文字符串
- 回文字符串(NYOJ 37)
- nyoj 37 回文字符串
- nyoj 37 回文字符串
- 动态函数调用追踪方法
- 郑州治理露天烧烤 面临“烤”验 取证难 回潮易
- Linux服务器开发初步
- Nio学习3——基础模型:多路复用模型
- Eclipse中出现Setting build path has encountered a problem的解决方法
- nyoj 37 回文字符串题解
- zoj 3403 Strange Calendar III
- Android: 创建一个AlertDialog对话框,必须按确定或取消按钮才能关闭对话框,禁止按[返回键]或[搜索键]关闭
- 动态加载这一点,可以从Apache处理。htaccess文件看出来。你修改了。htaccess后,就
- Mysql索引优化浅谈
- UI标签库专题一:JEECG智能开发平台 BaseTag(样式表和JS引入标签)
- android驱动学习---led实验
- JAVA 线程000
- 【Python】上下文管理 with...as...