题解 | #最长回文子串#
最长回文子串
http://www.nowcoder.com/practice/12e081cd10ee4794a2bd70c7d68f5507
思路
- 将回文分为abba型和aba型
- 分别处理和统计,不断更新最大值
- 统计结束,输出最大值
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;
}