leetcode 5
最长回文子串
题目描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例2:
输入: "cbbd"
输出: "bb"
解法1:动态规划
思路:一个回文子串的左右两边再加上两个相同的字符同样是一个回文子串,当长度为1时,本身为回文串,当长度为2时,两个字符相同则为回文串
我们用一个二维数组来表示一个子串是否为回文串
P(i,j) = 0 //非回文串
P(i,j) = 1 //回文串
动态规划转移方程为
P(i,j) = (s[i]==s[j]) && P(i+1,j-1)
完整代码
char *longestPalindrome(char * s)
{
int n = strlen(s);
int dp[n][n];
int l, i;
static char ans[100];
for(i=0; i<n; i++)
for(l=0; l<n; l++)
dp[i][l]=0;
for(l=0; l<n; l++) //子串长度