给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
1.比较简单点的解法
思路:利用循环,遍历整个字符串。利用两个变量j、k分别从i位置向前、向后判断。
string longestPalindrome(string s)
{
int length=s.length();
string result;
if(length<2) return s;
int max=0;
int initinal=0;
int j=0,k=0;
for(int i=0;i<length-1;i++)
{
j=k=i;
while(j>=0&&s[j]==s[i]) j--;//字符相同的字符串肯定是回文
while(k<length&&s[k]==s[i])k++;
while(j>=0&&k<length&&s[j]==s[k])//当中间字符判断结束后,继续判断两侧字符是否相同,相同即可以组成回文
{
j--;
k++;
}
if(j==i-1&&s[j]==s[i])
{
max=2;
initinal=j;
}
if(k==i+1&&s[k]==s[i])
{
max=2;
initinal=i;
}
if(max<k-j-1)
{
max=k-j-1;
initinal=j+1;
}
}
int l=max+initinal;
for(;initinal<l;initinal++)
{
result.push_back(s[initinal]);
}
return result;
}