#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
int main() {
int N;
string s;
cin >> N >> s;
vector<vector<int>> dp(N, vector<int>(N, 0));
for (int i = 0; i < N; ++i) {
dp[i][i] = 1;
}
for (int len = 2; len <= N; ++len) {
for (int i = 0; i <= N - len; ++i) {
int j = i + len - 1;
if (s[i] == s[j]) {
dp[i][j] = dp[i+1][j-1] + 2;
} else {
dp[i][j] = max(dp[i+1][j], dp[i][j-1]);
}
}
}
int lps_length = dp[0][N-1];
int min_insertions = N - lps_length;
cout << min_insertions << endl;
return 0;
}
全部回复 共 0 条
还没有人回复。往下写第一条。
发表回复
登录后即可回复本帖,与出题人和同学一起讨论。
登录