您的位置:首页 > 其它

对称子字符串的最大长度

2011-04-29 15:58 295 查看
题目描述:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。分析:可能很多人都写过判断一个字符串是不是对称的函数,这个题目可以看成是该函数的加强版。

这个WP都出了一点小问题。真想挖个地洞,把自己深埋……

#include<stdio.h>
#include<string.h>

bool isPlalindrome(char *s, int begin, int end)
{
while( begin<=end )
{
if(*(s+begin) == *(s+end))
{
begin++;
end--;
}
else
return false;
}
return true;
}

int main()
{
char s[100];
while( scanf("%s", s) != EOF )
{
int MaxLengthPlalindrome = -1, i, j, len, MaxLengthPlalindromeBegin, MaxLengthPlalindromeEnd;//MaxLengthPlalindrome不能初始化为0,否则,对于回文串长度为1的将不能正常得到结果
len = strlen(s);
for(i=0; i<len; ++i)
{
for(j=len-1; j>=i; --j)
{
if( j-i <= MaxLengthPlalindrome )
{
break;
}
else
{
if( isPlalindrome(s, i, j) )
{
MaxLengthPlalindrome = j - i;
MaxLengthPlalindromeBegin = i;
MaxLengthPlalindromeEnd = j;
}
}
}
}
printf("%d ", MaxLengthPlalindromeEnd - MaxLengthPlalindromeBegin + 1);//回文串的长度
for(i=MaxLengthPlalindromeBegin; i<=MaxLengthPlalindromeEnd; ++i)//打印回文串
printf("%c", s[i]);
printf("/n/n");
}
return 0;
}
/*******************测试数据*********************/
/****************************************
google
4 goog

ILOVELCQQCLEVOLI
16 ILOVELCQQCLEVOLI

hello
2 ll

world
1 w
***************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: