题目描述
给定一个字符串 S,请你求出 S 的最长回文子串
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//中心扩展法查找最长回文子串
int longestPalindrome(char* s){
// start和maxlength用于记录最长回文子串的起始位置和长度
int start = 0,maxLength = 1;
//len是字符串的长度
int len = strlen(s);
// 外层循环遍历字符串的每个字符,作为回文中心
for(int i = 0;i<len ; i++){
//第一层内循环处理以单个字符为中心的回文子串
int left = i ,right = i; // 偶数
while(left >= 0 && right <len && s[left] == s[right]){
int currLength = right - left +1;
//在每次扩展中,如果找到更长的回文子串,则更新start和maxlength
if(currLength > maxLength){
start = left ;
maxLength = currLength;
}
left--;
right++;
}
//扩展中心为两个字符的情况
//第二层内循环处理以两个字符为中心的回文子串 (用于偶数长度的回文)
left = i, right = i +1;
while(left >= 0 && right <len && s[left] == s[right]){
int currLength = right -left +1;
if(currLength > maxLength){
start = left ;
maxLength = currLength;
}
left--;
right++;
}
}
return maxLength;
}
int main(int argc, char *argv[])
{
char s[500000];
//读取一个字符串
scanf("%s",s);
//调用函数计算最长回文子串的长度
printf("%d\n",longestPalindrome(s));
//输出最长回文子串的长度
return 0;
}