题目描述:求一个字符串最长的回文子字符串。例如abbaghg字符串的子串abba子串为回文串,并且长度为4.
解题方法:
该道题目有多种解法,这里提供一种比较容易理解的算法,时间复杂度为O(n).该算法的主要思路是,给定一个字符,两端延生判断是否是回文字符串。特别注意的是,一个回文字符串有奇数和偶数个之分,两种情况都有考虑到。
Code:
int GetLongestSymmetrical(string &str)
{
if(str.size()==0)
return 0;
int ret=0;
for(int i=0;i<str.size();i++)
{
/*子字符串的长度为奇数*/
int low=i-1;
int high=i+1;
while(low>=0 && high<str.size() && str.at(low)==str.at(high))
{
low--;
high++;
}
int tmp=high-low-1;
if(tmp>ret)
ret=tmp;
/*子字符串的长度为偶数*/
low=i; high=i+1;
while(low>=0 && high<str.size() && str.at(low)==str.at(high))
{
low--;
high++;
}
tmp=high-low-1;
if(tmp>ret)
ret=tmp;
}
return ret;
}