动态规划-最长回文子串

定义str[]字符数组,和dp[][]数组
dp[i][j]表示str[i]到str[j]是否是回文串。1表示是,0表示不是。
str[i]到str[j]是回文串要求str[i]=str[j],并且str[i+1]=str[j-1],str[i+2]=str[j-2]以此类推。
所以dp[i][j] = 0 (str[i]!=str[j] ) dp[i][j]=dp[i+1][j-1] (str[i]=str[j])
最长回文子串长度存在变量ans中。
初始化问题:dp[i][i] = 1,if (str[i]=str[i+1]) dp[i][i+1] = 2.
然后从长度为3开始检索。

#include
using namespace std;
#define maxn 105
char str[maxn]; 
int dp[maxn][maxn];//dp[i][j]表示str[i]和str[j]之间是否是回文子串 
int main(){
	scanf("%s",str);
	int len = strlen(str);
	memset(dp,0,sizeof(dp));
	for(int i=0;i

你可能感兴趣的:(动态规划-最长回文子串)