1、递归法
int fun(int low, int high, char *str, int length)
{
if (length == 0 || length == 1)
return 1;
if (str[low] != str[high])
return 0;
return fun(low+1, high-1, str, length-2);
}
2、枚举
枚举回文串的中间位置i,然后不断的向外扩展。
for(i = 0; i < m; i++) //枚举中间位置,以此为基点向两边扩展
{
for(j = 0; i-j >= 0 && i+j < m; j++)//i-j:向右,i+j:向左 ,此时用于串的长度为奇数,所以向两边扩展的长度一样
{
if(s[i-j] != s[i+j])
break;
if(j*2+1 > max)
{
max = j*2+1;
x = p[i-j];
y = p[i+j];
}
}
for(j = 0; i-j >= 0 && i+j+1 < m; j++)
{
if(s[i-j] != s[i+j+1])
break;
if(j*2+2 > max)
{
max = j*2+2;
x = p[i-j];
y = p[i+j+1];
}
}
}