NYOJ 37 回文字符串
2012-02-14 19:30
183 查看
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=37
思想:在纸上测试几组数据,发现先逆转原来的字符串,再用原来的字符串跟逆转后的字符串进行比较,求得的最长公共子序列就是回文串,也就是不需要添加的,再用总长度减去最长公共子序列就可以得到最少需要添加的字符数。代码就简单了,以前写过的稍稍改下就直接贴上来了。
代码:
思想:在纸上测试几组数据,发现先逆转原来的字符串,再用原来的字符串跟逆转后的字符串进行比较,求得的最长公共子序列就是回文串,也就是不需要添加的,再用总长度减去最长公共子序列就可以得到最少需要添加的字符数。代码就简单了,以前写过的稍稍改下就直接贴上来了。
代码:
#include<stdio.h> #include<string.h> int f[1001][1001]; int main() { char str1[1001],str2[1001]; int ncases,i,j,k,len; scanf("%d",&ncases); while(ncases--) { memset(str1,0,sizeof(str1)); memset(str2,0,sizeof(str2)); scanf("%s",str1); len=strlen(str1); for(k=0,i=len-1;i>=0;i--)//**转置字符串**// { str2[k++]=str1[i]; } for(i=0;i<=len;i++) { f[i][0]=f[0][i]=0; } for(i=1;i<=len;i++) { for(j=1;j<=len;j++) { if(str1[i-1]==str2[j-1])//**求最长公共子序列**// { f[i][j]=f[i-1][j-1]+1; } else { f[i][j]=f[i-1][j]>f[i][j-1]?f[i-1][j]:f[i][j-1]; } } } printf("%d\n",len-f[len][len]);//**用长度减去最长公共子序列得到需要最少添加的字符数**// } return 0; }
相关文章推荐
- 回文字符串(NYOJ 37)
- NYOJ 题目37 回文字符串(动态规划)
- NYOJ-37 回文字符串 —— LCS变形
- NYOJ-37-回文字符串(最长公共子序列)
- 【又见LCS】NYOJ-37 回文字符串
- NYOJ 37 回文字符串
- nyoj 37 回文字符串 【lcs&&dp】
- nyoj 37 回文字符串
- nyoj-37-回文字符串
- nyoj_37_回文字符串_201403121649
- NYOJ 37 回文字符串 (dp)
- nyoj 37 51nod oj 1092 回文字符串 【LCS变形】
- nyoj 37 回文字符串(LCS)
- nyoj_37 回文字符串
- NYOJ - 37 - 回文字符串(LCS变形)
- nyoj 37 回文字符串
- NYOJ 37-回文字符串(简单DP)
- NYOJ 37 回文字符串
- 回文字符串(nyoj 37)
- NYOJ37 回文字符串(动态规划)