给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?

来源:互联网 发布:云计算工程师工资多少 编辑:程序博客网 时间:2024/09/21 09:06

给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?

输出需要删除的字符个数。

输入描述:

输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.

输出描述:

对于每组数据,输出一个整数,代表最少需要删除的字符个数。


输入例子:

abcda

google

输出例子:

2

2

#include <iostream>#include <string.h>#include <algorithm>using namespace std;const int MAXN=1010;int temp[MAXN][MAXN];//先求s的反串reverse,然后求他们的最长的公共子序列,要删除的字符个数就能知道//时间复杂度O(N^2)int getRemoveNumber(string &s1){    string s2(s1);    reverse(s2.begin(),s2.end());    int len=s1.length();    memset(temp,0,sizeof temp);    for(int i=0;i<len;++i)    {        for(int j=0;j<len;++j)        {            if(s1[i]==s2[j])                temp[i+1][j+1]=temp[i][j]+1;            else temp[i+1][j+1]=max(temp[i][j+1],temp[i+1][j]);        }    }    return len-temp[len][len];}int main(){   string s;   while(cin>>s)   {       cout<<getRemoveNumber(s)<<endl;   }   return 0;}
0 0
原创粉丝点击