解题思路: 看到大家都用动态规划来解决的,我也在这里也写上一点动态规划的 相关知识~ 
1、递归思路: 从大范围/变量 -> 小范围/变量 来递推。 是从顶到底的一个思路
2、而动态规划:  先求小条件, -> 往大条件递推, 是从底到顶的 一个思路

用dp[i][j] =1 , 表示从i 到j 为回文子串。则可以列出状态转移方程
                 s[i] == s[j] && dp[i+1] [j-1] == 1;
dp[i][j] = { 
                0, s[i] != s[j] // 只符合这一个条件即可 
        


#include <stdio.h>

int main(void) {
    char str[351] = {0};
    fgets(str, 351, stdin);
    int length = strlen(str) -1;
    int dp[350][350] = {0};
    int max_ans = 1;
    
    for(int i = 0; i < length; i++) {
        dp[i][i] = 1;
        if (i < length-1) {
            if (str[i] == str[i+1]) {
                dp[i][i+1] = 1;
                max_ans = 2;  // 将所有长度为2 的回文子串都遍历出来,并且将其放在表中 
            }
        }
    }
    
    for (int L = 3; L <= length; L++) { //长度从3到 输入字符串长度
        for (int i = 0; i< length -L +1; i++) { // 关于回文子串最后的起始位置 可以 实际赋值后计算, 否则很容易出错
            int j = i+L-1; // 注意考虑前后回文子串节点
            if ((str[i] == str[j]) && (dp[i+1][j-1] == 1)) {
                dp[i][j] = 1;
                max_ans = L;
            }
        }
     }
    printf("%d\n", max_ans);
    
    return 0;
}