#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
int len;
int max;
cin >> len;
max = len - 1;
cin >> s;
for (int i = 1; i < len-1; i ++){
int j = i-1, k = i+1, temp = 0;
while(j>=0){
while (k<len){
if ( s[j] == s[k] ){
j --; k ++;
}
else{
k ++;
temp ++;
}
}
if (k>=len) break;
}
if ( j+1 ) temp += j + 1;
if ( len-k ) temp += len - k;
if ( temp<max ) max = temp;
}
cout << max << endl;
return 0;
}
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
int len;
int max;
cin >> len;
max = len - 1;
cin >> s;
for (int i = 1; i < len-1; i ++){
int j = i-1, k = i+1, temp1 = 0;
while(j>=0){
while (k<len){
if ( s[j] == s[k] ){
j --; k ++;
}
else{
k ++;
temp1 ++;
}
}
if (k>=len) break;
}
if ( j+1 ) temp1 += j + 1;
if ( len-k ) temp1 += len - k;
j = i, k = i+1;
int temp2 = 0;
while(j>=0){
while (k<len){
if ( s[j] == s[k] ){
j --; k ++;
}
else{
k ++;
temp2 ++;
}
}
if (k>=len) break;
}
if ( j+1 ) temp2 += j + 1;
if ( len-k ) temp2 += len - k;
int temp = 0;
if ( temp1>temp2) temp = temp2;
else temp = temp1;
if (temp<max) max = temp;
}
cout << max << endl;
return 0;
}
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n;
cin >> n;
string s1;
cin >> s1;
string s2 = s1;
for (int i = 0; i < n; i ++)
s2[i] = s1[n-i-1];
int c[2][5001];
int temp = 0;
memset(c,0,sizeof(c));
for (int i = 1; i <= n; i ++)
for ( int j = 1; j <= n; j ++){
temp = c[(i-1)%2][j]>c[i%2][j-1]?c[(i-1)%2][j]:c[i%2][j-1];
if (s1[i-1] == s2[j-1])
c[i%2][j] = (c[(i-1)%2][j-1]+1)>temp?(c[(i-1)%2][j-1]+1):temp;
else
c[i%2][j] = temp;
}
int max = c[0][n]>c[1][n]?c[0][n]:c[1][n];
cout << n-max << endl;
return 0;
}
所以那個AC是多麼的不容易。。。