nyoj-回文字符串--动态规划
2013-07-06 11:27
267 查看
回文字符串
时间限制:3000 ms | 内存限制:65535 KB难度:4
描述所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba"。当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串。现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串。
输入第一行给出整数N(0<N<100)
接下来的N行,每行一个字符串,每个字符串长度不超过1000.输出每行输出所需添加的最少字符数样例输入
1 Ab3bd
样例输出
2
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int dp[1002][1002]; char a[1002],b[1002]; int len; int min_huiwenchuan(char *a,char *b) { int i,j; for(i=1;i<=len;i++) { for(j=1;j<=len;j++) { if(a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1]+1; else dp[i][j]=max(dp[i][j-1],dp[i-1][j]); } } return len-dp[len][len]; } int main() { int N,i; scanf("%d",&N); while(N--) { scanf("%s",&a);len=strlen(a); for(i=0;i<len;i++) b[len-i-1]=a[i]; memset(dp,0,sizeof(dp)); printf("%d\n",min_huiwenchuan(a,b)); } return 0; }
View Code
就是把此题把字符串逆转,然后转化为最长公共子序列问题,再然后用总的长度减去最长公共子序列数,就ok了
相关文章推荐
- NYOJ 题目37 回文字符串(动态规划)
- NYOJ37 回文字符串(动态规划)
- nyoj--37--回文字符串(动态规划)
- nyoj--37--回文字符串(动态规划)
- Palindrome Partitioning II(找给定字符串分割次数获取回文字串, 动态规划)
- NYOJ 37 回文字符串 (dp)
- NYOJ-37 回文字符串 —— LCS变形
- NYOJ 132 最长回文字符串
- nyoj 37 回文字符串(LCS)
- 变成回文字符串所需要的次数-动态规划
- NYOJ 37 回文字符串(类似最长公共子序列)
- leetcode最长回文字符串_动态规划
- nyoj 37 回文字符串 【LCS】
- nyoj 37题 回文字符串 (dp)
- nyoj 36最长公共子序列&&nyoj 37 回文字符串
- nyoj-37 回文字符串(最长公共子序列算法应用
- NYOJ 37-回文字符串(简单DP)
- nyoj--1023--还是回文(动态规划)
- NYOJ - 回文字符串(DP)
- nyoj 36 最长公共子序列 & nyoj 37 回文字符串