输入一个字符串,可在任意位置添加字符,计算最少再添加几个字符,可以使这个字符串成为回文字符串
int minCost(char a[], int n)
{
char **buf = new char*[n];
for (int i = 0; i < n; i++)
{
buf[i] = new char[n+1];
}
for (int i = 0; i < n; i++)
{
buf[i][0] = 0;
buf[i][1] = 0;
}
//buf[i][j]表示将从第i个字符开始的长度为j的字符串转换为回文字符串所需添加的字符数量
for (int i = n-2; i >= 0; i--)
{
for (int j = 2; j < n+1-i; j++)
{
if (a[i] == a[j-1+i])
{
buf[i][j] = buf[i+1][j-2];
}
else
{
buf[i][j] = buf[i+1][j-1] < buf[i][j-1]? buf[i+1][j-1]+1 : buf[i][j-1]+1;
}
}
}
int result = buf[0][n];
for (int i = 0; i < n; i++)
{
delete []buf[i];
}
delete buf;
return result;
}