OJ题目 : 戳这里~~
描述-
输入
-
第一行给出整数N(0<N<100)
接下来的N行,每行一个字符串,每个字符串长度不超过1000.
输出
- 每行输出所需添加的最少字符数 样例输入
-
1 Ab3bd
样例输出
-
2
#define inf 100000000
string s;
int dp[1002][1002];
int dfs(int i,int j)
{
if(dp[i][j] != -1) return dp[i][j];//如果已经判断过,直接返回
if(i >= j) return 0;//剩下最后一个字母,或者已经处理完毕,返回0
if(s[i] == s[j]) return dp[i][j] = dfs(i + 1, j - 1);//当前首尾相同
return dp[i][j] = Min(dfs(i + 1,j) + 1 , dfs(i , j - 1) + 1);//当前首尾不相同,两种情况取最小值
}
int main()
{
int n;
cin >> n;
while(n--)
{
memset(dp , -1 , sizeof(dp));
cin >> s;
printf("%d\n",dfs(0, s.length() - 1));//从s的首尾开始
}
return 0;
}