AcWing 1222. 密码脱落(C++)
原题链接
中等
作者:
朝花夕拾杯中酒
,
2021-04-16 19:30:53
,
所有人可见
,
阅读 275
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
string s;
int dp[1010][1010];
//dp[i][j]的含义:从i到j组成的字符串最少要添加几个字符才能恢复成回文串
int DP(int i, int j)
{
if(i >= j)
return 0;
if(dp[i][j] != -1)
return dp[i][j];
if(s[i] == s[j])
dp[i][j] = DP(i+1, j-1);
else
dp[i][j] = min(DP(i+1, j), DP(i,j-1))+1;
return dp[i][j];
}
int main()
{
memset(dp, -1, sizeof dp);
cin >> s;
cout << DP(0, s.size()-1);
return 0;
}