摘要
什么是回文? 回文是一个正读和反读都相同的字符串,例如,“aba” 是回文,而 “abc” 不是。
解决方案
- 求反
- 暴力求解
- 动态规划
- 中心扩散
- Manacher 算法
动态规划代码实现
下面是我用C语言实现的动态规划算法
char * longestPalindrome(char * s){
int startP = 0, maxLen = 0;
int sLen = strlen(s);
bool **p;
p = (bool**)malloc(sizeof(bool*)*sLen);
for (int i = 0; i < sLen; i++)
{
p[i] = (bool*)malloc(sizeof(bool)*sLen);
}
//求解p[0,3],必须先求解p[1,2],所以用的是p[j][i]循环
for (int i = 0; i < sLen; i++)
{
for (int j = 0; j < sLen - i; j++)
{
if (i == 0)
p[j][j+i] = 1;
else if (i == 1)
p[j][j+i] = (s[j]==s[j+1]) ? 1 : 0;
else
p[j][j+i] = (p[j+1][j+i-1]) && (s[j]==s[j+i]) ? 1 : 0;
if ((p[j][j+i]) && (i+1 > maxLen))
{
maxLen = i + 1;
startP = j;
}
}
}
free(p);
char *str = (char*)malloc(sizeof(char)*(maxLen+1));
for (int i = 0; i<maxLen; i++)
{
str[i] = s[startP+i];
}
str[maxLen] = '\0';
return str;
}