1092 回文字符串(51nod)
原题链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1092
这题其实可以把字符串str反转一下然后再求两个字符串的最长公共子序列的长度,然后len(str)-那个长度就是答案了= =
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; #define maxn 1000001 char s[maxn]; char ch[maxn]; int f[1110][1110]; int main() { while(scanf("%s",s)!=EOF) { int m=strlen(s); int k=0; for(int i=m-1;i>=0;i--) ch[k++]=s[i]; ch[k]='\0' ; int n=strlen(ch); memset(f,0,sizeof(f)); for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) if(s[i-1]==ch[j-1]) f[i][j]=f[i-1][j-1]+1; else f[i][j]=max(f[i][j-1],f[i-1][j]); } //printf("%d\n",f[m][m]) ; printf("%d\n",m-f[m][n]); } return 0; }