#include <cstdio>
#include <algorithm>
#include <cstring>
#include <map>
#include <vector>
using namespace std;
#define N 5010
int d[2][N];
char s[N];
// if (i == j)m[i][j] = m[i + 1][j - 1];
// else m[i][j] = min(m[i][j - 1], m[i + 1][j]) + 1;
int main(){
int n;
scanf("%d", &n);
scanf("%s", s);
memset(d, 0, sizeof(d));
int cur = 0;
for (int i = n - 2; i >= 0; i-- ){
for (int j = i + 1; j < n; j++){
if (s[i] == s[j])d[cur][j] = d[!cur][j - 1];
else d[cur][j] = min(d[cur][j - 1], d[!cur][j]) + 1;
}
cur = !cur;
}
printf("%d\n", d[!cur][n - 1]);
return 0;
}
POJ 1159 Palindrome
最新推荐文章于 2022-05-16 16:41:42 发布