给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
个人思路:直接暴力解,实际上中心扩散也和暴力解差不多,时间复杂度低一点。中心扩散注意分两种情况处理。
int ispalindromic(char *s,int left,int right){
int i=left,j=right;
while(i<=j){
if(s[i]!=s[j])break;
else{
i++;
j--;
}
}
if(i>=j)return 1;
else return 0;
}
char * longestPalindrome(char * s){
int maxlength=0,left,right;
int maxleft,maxright;
left=0;
right=strlen(s)-1;
for(int i=0;i<=right;i++){
int length;
for(int j=right;j>=i;j--){
length=j-i+1;
if(ispalindromic(s,i,j)&&length>maxlength){
maxleft=i;
maxright=j;
maxlength=length;}
}}
printf("%d %d %d",maxleft,maxright,maxlength);
char *a=(char *)malloc(maxlength+1);
for(int i=0;i<maxlength;i++){
a[i]=s[i+maxleft];
}
a[maxlength]='\0';
return a;}