题解 | #最长回文子串#

最长回文子串

http://www.nowcoder.com/practice/12e081cd10ee4794a2bd70c7d68f5507

思路

  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;
}
全部评论

相关推荐

02-15 09:23
已编辑
深圳技术大学 Java
德勤 后端 OC 实习140/天,转正税前7k
恶龙战士:不如码农烧烤
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务