C语言代码 对给定的字符串,本题要求你输出最长对称子串的长度。
时间: 2023-06-02 12:03:17 浏览: 54
好的,这是一个可以回答的技术问题。以下是一种实现方法,实现代码使用了动态规划的思想:
```
#include <stdio.h>
#include <string.h>
// 判断是否是对称子串
int is_symmetric(char *str, int left, int right)
{
while (left < right) {
if (str[left] != str[right]) {
return 0;
}
left++;
right--;
}
return 1;
}
int main()
{
char str[101];
int dp[101][101] = {0}; // 动态规划数组,dp[i][j] 表示从 i 到 j 的子串是否为对称串
int len, max_len = 1;
scanf("%s", str);
len = strlen(str);
// 初始化:单个字符都是对称的
for (int i = 0; i < len; i++) {
dp[i][i] = 1;
}
// 求解动态规划数组
for (int j = 1; j < len; j++) {
for (int i = 0; i < j; i++) {
if (str[i] == str[j] && (j - i <= 2 || dp[i+1][j-1])) { // 递推公式
dp[i][j] = 1;
max_len = j - i + 1 > max_len ? j - i + 1 : max_len; // 更新最长对称子串的长度
}
}
}
printf("%d\n", max_len);
return 0;
}
```