给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
示例 1:
输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd" 输出: "bb"
1.常规方法
#include "cstdio"
#include "cstring"
int main()
{
char str_in[128];
char str[256];
int curl, curr, cent;
int max_len = 0, max_curl, max_curr;
int j = 1;
//输入字符串
gets(str_in);
//每个字符中间插入 #
for(int i = 0; i < strlen(str_in); i += 1, j += 2)
{
str[j-1] = str_in[i];
str[j] = '#';
}
str[j] = '\0';
//窗口滑动
for(int i = 1; i < strlen(str); i++)
{
cent = i;
curl = i - 1;
curr = i + 1;
while(curl >= 0 && curr < strlen(str) && str[curl] == str[curr])
{
curl --;
curr ++;
}
if(curr - curl > max_len)
{
max_len = curr - curl;
max_curl = curl;
max_curr = curr;
}
}
//打印结果
for(int i = max_curl +1; i < max_curr; i++)
{
if(str[i] != '#')
putchar(str[i]);
}
return 0;
}