动态规划 ---- 最长回文子串

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 }

 

以上是关于动态规划 ---- 最长回文子串的主要内容,如果未能解决你的问题,请参考以下文章

动态规划 ---- 最长回文子串

最长回文子串 (动态规划法中心扩展算法)

最长回文子串--动态规划

动态规划 | 最长回文子串 1040

Leetcode 5. 最长回文子串

数据结构与算法动态规划——最长回文子串