题目描述:
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答:
char * longestPalindrome(char * s)
{
char * p = NULL;
int len = 0;
int i, j, k = 0;
int count = 0;
int start = 0;
char *temp = NULL;
p = s;
len = strlen(s);
if(len <= 1)
{
return s;
}
for(i = 0; i<len;i++)
{
for(j = i+1;j<len;j++)
{
if(p[i] == p[j])//找出所有头尾元素相等的子串
{
for(k = 0;k<=j - i;k++)//判断子串是否为回文报文
{
if(!(p[i + k] == p[j - k]))
{
k = 0; //防止k长度大于正确的回文子串长度
break;
}
}
if(k == len) //若子串长度等于字符串长度,直接返回字符串
{
return s;
}
if(count < k) //最大值赋给count
{
count = k;
start = i;
}
}
}
}
if(0 == count) //若没有回文子串
{
*(s+1) = '\0';
return s;
}
temp = &s[start];
temp[count] = '\0';
return temp;
}
运行结果: