思路

  1. 将回文分为abba型和aba型
  2. 分别处理和统计,不断更新最大值
  3. 统计结束,输出最大值

Answer

#include<stdio.h>
#include<string.h>

int main() {
    char str[350];
    int max = 0;

    while (scanf("%s", str) != EOF) {
        int len = strlen(str);
        for (int i = 0; i < len; i++) {
            int sum = 0;
            if (str[i] == str[i + 1]) { //abba
                for (int k = 0; k < len; k++) {
                    if (str[i - k] == str[i + k + 1] && (i - k) >= 0 && (i + k + 1) < len) {
                        sum++;
                    } else {
                        break;
                    }
                    max = fmax(max, sum * 2);
                }
            }
            if (str[i - 1] == str[i + 1]) { //aba
                int sum2 = 0;
                for (int k = 0; k < len; k++) {
                    if (str[i - k - 1] == str[i + k + 1] && (i - k - 1) >= 0 && (i + k + 1) < len) {
                        sum2++;
                    } else {
                        break;
                    }
                    max = fmax(max, sum2 * 2 + 1);
                }
            }
        }
    }
    printf("%d", max);
    return 0;
}