1. 程式人生 > >(動態規劃)最長迴文子串

(動態規劃)最長迴文子串

程式碼

#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; }