#include <stdint.h> #include <stdio.h> #include <string.h> // 以字符串s的index下标为中心,计算最长的对称长度 uint32_t maxLen(char* s, uint32_t index) { uint32_t length = 0; uint32_t result = 0; uint32_t max1 = 0, max2 = 0; int l,r; length = strlen(s); if (index > length) { result = 0; } else { // 尝试以 s[index] 为中心,以 ABCBA 形式计算最长的对称长度 max1 = 1; for (l=index-1,r=index+1; (l>=0)&&(r<length); --l,++r) { if (s[l] == s[r]) max1 += 2; else break; } // 尝试以 s[index] 与 s[index+1] 为中心,以 ABCCBA 形式计算最长的对称长度 if (s[index] == s[index+1]) { max2 = 2; for (l=index-1,r=index+2; (l>=0)&&(r<length); --l,++r) { if (s[l] == s[r]) max2 += 2; else break; } } // 取两种形式中较大的 result = max1>max2 ? max1 : max2; } return result; } int main() { char s[2501] = {}; int length=0, result=0, i, temp; scanf("%s", s); length = strlen(s); for (i=0; i<length-result; ++i) { temp = maxLen(s, i); result = temp>result ? temp : result; } printf("%d", result); return 0; }