转移方程 dp[i] = min(dp[j-1] + 1 , dp[i]) 1<=j <=i;
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <cstdio>
using namespace std;
int dp[100000];
char s[100000];
int T;
bool judge(int from , int to)
{
while(from <= to)
{
if(s[from] != s[to])
{
return false;
}
from++;
to--;
}
return true;
}
int main ()
{
cin >> T;
while(T--)
{
cin >> s;
int len = strlen(s);
memset(dp,0,sizeof(dp));
for(int i = 0 ; i < len ; i++)
{
dp[i] = i+1;
for(int j = 0 ; j <= i ; j++)
{
if(judge(j,i))
dp[i] = min (dp[j-1]+1,dp[i]);
}
}
cout << dp[len-1] << endl;
}
return 0;
}