题解 | #最长回文子串#

最长回文子串

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

相关推荐

听说改名字就能收到offer哈:Radis写错了兄弟
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
09-30 19:49
起名星人:蛮离谱的,直接要求转投销售
投递汇川技术等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务