动态规划 ---- 最长回文子串
Posted hi3254014978
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划 ---- 最长回文子串相关的知识,希望对你有一定的参考价值。
分析:
完整代码:
1 #include <stdio.h> 2 #include <iostream> 3 #include <cstring> 4 using namespace std; 5 6 const int maxn = 1010; 7 char S[maxn]; 8 int dp[maxn][maxn]; 9 10 int main() 11 { 12 cin.getline(S, 1010); 13 int len = strlen(S), ans = 1; 14 memset(dp, 0, sizeof(dp)); // dp数组初始化为0 15 // 边界 16 for (int i = 0; i < len; i++){ 17 dp[i][i] = 1; 18 if (i < len - 1){ 19 if (S[i] == S[i + 1]){ 20 dp[i][i + 1] = 1; 21 ans = 2; // 初始化是注意当前最长回文子串长度 22 } 23 } 24 } 25 // 状态转移方程 26 for (int L = 3; L <= len; L++){ // 枚举子串的长度 27 for (int i = 0; i + L - 1 < len; i++){ // 枚举子串的起始端点 28 int j = i + L - 1; // 子串的右端点 29 if (S[i] == S[j] && dp[i + 1][j - 1] == 1){ 30 dp[i][j] = 1; 31 ans = L; // 更新最长回文子串的长度 32 } 33 } 34 } 35 36 printf("%d ", ans); 37 38 return 0; 39 }
以上是关于动态规划 ---- 最长回文子串的主要内容,如果未能解决你的问题,请参考以下文章