Palindrome

来源:互联网 发布:整理文档的软件 编辑:程序博客网 时间:2024/05/17 06:01

求最少插入多少个字符使原字符串成为一个回文串。

用字符的正向串和逆向求出最长公共子序列即可知道需要添加的字符数目。

学到一点关于滚动数组的知识。

#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;const int MAX=5050;char str1[MAX],str2[MAX];int dp[2][MAX];int main(){    int a;    scanf("%d",&a);    scanf("%s",str1);    memset(dp,0,sizeof(dp));    for(int i=a-1;i>=0;i--)        str2[a-i-1]=str1[i];    for(int i=0;i<a;i++)      for(int j=0;j<a;j++)      {           if(str1[i]==str2[j])            {                if(j!=0)dp[i&1][j]=dp[(i+1)&1][j-1]+1;                else dp[i&1][j]=1;            }        else{            if(j!=0)dp[i&1][j]=max(dp[(i+1)&1][j],dp[i&1][j-1]);            else dp[i&1][j]=0;        }       }      printf("%d\n",a-dp[1&(a-1)][a-1]);    return 0;}


原创粉丝点击