您的位置:首页 > 其它

计蒜客习题:回文串

2018-03-03 08:44 323 查看

问题描述

一个字符串如果从左往右读和从右往左读都一样,那么这个字符串是一个回文串。例如:”abcba”,”abccba”。

蒜头君想通过添加字符把一个非回文字符串变成回文串。例如:”trit”,可以添加一个’i’ 变成回文串”tirit”。请你用程序计算出,对于一个给定的字符串,最少需要添加几个字符,才能变成回文串。

输入格式

输入一个长度为n(1≤n≤3000) 的字符串。(字符串只包含字母)

输出格式

输出最少需要添加的字符个数,占一行。

样例输入

trit

样例输出

1

AC代码

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char a[3010];
char b[3010];
int lcs[3010][3010];
int main()
{
memset(lcs,0,sizeof(lcs));
int n=1;
char x;
while(scanf("%c",&x)==1&&x!=10)
{
a
=x;
n++;
}
n--;
for(int i=1;i<=n;i++)
{
b[n-i+1]=a[i];
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(a[i]==b[j])lcs[i][j]=lcs[i-1][j-1]+1;
else lcs[i][j]=max(lcs[i-1][j],lcs[i][j-1]);
}
}
cout<<n-lcs

;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: