//d[i][j]表示从i到j所需插入最少的字符
//状态转移方程:
//ch[i] == ch[j] 时,d[i][j] = d[i+1][j-1]
//ch[i] != ch[j] 时, d[i][j] = min( d[i+1][j], d[i][j-1] ) + 1
#include <iostream>
#include <cstring>
using namespace std;
int dp();
char ch[1010];
int d[1010][1010];
int len;
int main()
{
int T;
cin >> T;
while(T--)
{
cin >> (ch+1);
len = strlen(ch+1);
memset(d, 0, sizeof(d));
cout << dp() << endl;
}
}
int dp()
{
for(int i = len; i >= 1; i--)
for(int j = i; j <= len; j++)
{
if(ch[i] == ch[j])
d[i][j] = d[i+1][j-1];
else
d[i][j] = (d[i+1][j] < d[i][j-1] ? d[i+1][j] : d[i][j-1]) + 1;
}
return d[1][len];
}
南阳理工OJ_题目37 回文字符串
最新推荐文章于 2018-09-26 11:18:49 发布