计蒜客习题:回文串
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; }