7-1 最长对称子串 分数 25 作者 陈越 单位 浙江大学 对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。用C语言写出
时间: 2024-02-06 08:10:35 浏览: 155
```c
#include <stdio.h>
#include <string.h>
#define MAX 1005
int dp[MAX][MAX];
int max(int a, int b)
{
return a > b ? a : b;
}
int main()
{
char str[MAX];
fgets(str, MAX, stdin);
int len = strlen(str) - 1; // 去掉 \n
int ans = 1; // 初始化为1,因为单个字符也是对称的
for (int i = 0; i < len; i++)
{
dp[i][i] = 1; // 初始化为1,因为单个字符也是对称的
if (i + 1 < len && str[i] == str[i + 1])
{
dp[i][i + 1] = 1;
ans = 2;
}
}
for (int L = 3; L <= len; L++) // 枚举子串长度
{
for (int i = 0; i + L - 1 < len; i++) // 枚举子串起点
{
int j = i + L - 1; // 子串终点
if (str[i] == str[j] && dp[i + 1][j - 1] == 1) // 如果子串两端相同且内部也是对称的,则该子串也是对称的
{
dp[i][j] = 1;
ans = max(ans, L);
}
}
}
printf("%d\n", ans);
return 0;
}
```
阅读全文