(動態規劃)最長迴文子串
阿新 • • 發佈:2018-11-22
程式碼
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
#include <string>
#include <iostream>
using namespace std;
#define maxn 1010
int dp[maxn][maxn];
int main() {
ios::sync_with_stdio (false);
string S;
int t = 1;
while (cin >> S&&S!="END") {
for (int i = 0; i < maxn; i++) {
for (int j = 0; j < maxn; j++) {
dp[i][j] = 0;
}
}
int len = S.length(), ans = 1;
int i = 0, j = 0, L = 0;
for (i = 0; i<len; ++i) {
dp[i][i] = 1;
if (i < len - 1) {
if (S[i] == S[i + 1]) {
dp[i][i + 1] = 1;
ans = 2;
}
}
}
for (L = 3; L <= len; ++L) {
for (i = 0; i + L - 1 < len; ++i) {
j = i + L - 1;
if (S[i] == S[j] && dp[i + 1][j - 1] == 1) {
dp[i][j] = 1;
ans = L;
}
}
}
printf("Case #%d: %d\n" ,t++, ans);
S.erase(0, len);
}
system("pause");
return 0;
}