c_cpp 动态规划 - 最长回文子串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 动态规划 - 最长回文子串相关的知识,希望对你有一定的参考价值。
/*
最长回文子串
*/
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
#define maxn 1010
char S[maxn];
int dp[maxn][maxn];
int main() {
gets(S); // 输入整行字符
int len=strlen(S), ans=1; // ans 记录最长回文子串长度
int i, j, L;
// 边界
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("%d\n", ans); // 输出
return 0;
}
以上是关于c_cpp 动态规划 - 最长回文子串的主要内容,如果未能解决你的问题,请参考以下文章
字符串最长回文子串 ( 动态规划算法 ) ★
数据结构与算法动态规划——最长回文子串
动态规划——最长回文子串
[动态规划]最长回文子串
leetcode-5 最长回文子串(动态规划)
[动态规划]最长回文子串-对于动态转移循环顺序的思考