力扣题库5. 最长回文子串
题目描述:给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"输出:"bb
题解:
什么叫回文串?
如果一个字符串正着读和反着读是一样的,那它就是回文串。
这应该算是暴力法吧。
遍历数组,固定住左端,然后从最右端往前找与固定住的字符相同的,再判断是否是回文串,不是的话继续往前找,一直找到固定住的那个字符,如果是回文子串,记录下长度以及固定住的那个字符的下标,然后跳出循环,进行下一个字符的循环。
完整代码:
#include <stdio.h>
char * longestPalindrome(char * s)
{
int left = 0;
int right = strlen(s);
int maxSize = 1;
int t = 0;
int start = 0;
if(right <= 1 )
return s;
for(left = 0;s[left]!='\0';left++)//从最左边开始遍历
{
t = 0;//判断是否有最大值替换;
if(right - left + 1 <= maxSize)
{
break;//如果数组剩余字符数量少于maxSize,直接跳出循环;
}
for(right = right-1;right>left;right--)//右边往前遍历数组;
{
if(s[left]==s[right])
{
for(int i = left,j = right;i <= j;i++,j--)
{
if(i == j||(i==j-1&&s[i]==s[j]))
{
if(maxSize<(right-left+1))
{
maxSize = right - left + 1;
start = left;
t = 1;//maxSize修改值之后退出此外层循环;
}
}
if(s[i]!=s[j])//判断是否是回文串
{
break;
}
}
}
if(t==1)
{
break;
}
}
right = strlen(s);
}
s[start + maxSize] = '\0';
return s+start;
}