zoukankan      html  css  js  c++  java
  • 最长回文子串

    看了刘汝佳的白书,才发觉最长回文子串不是那么难,关键是将思路转化为代码;

    之前看到一种通过在两个元素之间加入分隔符的方法,将奇偶情况统一起来,其实并没有减少运算量,感觉没直接的好,虽然代码长点,但是思路清晰;

    另外学习了如何使用 fgets() 以及为什么不推荐使用 gets() 。

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

    # define MAXN 1000

    char ch[MAXN], s[MAXN];

    int main()
    {
    int len, i, j, max, sta, end;

    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);

    while (fgets(ch, MAXN, stdin) != NULL)
    {
    max = 0;
    len = strlen(ch);
    for (i = 0; i < len; ++i)
    s[i] = toupper(ch[i]);
    s[i] = '\0';
    for (i = 0; i < len; ++i)
    {
    for (j = 0; i-j >= 0 && i+j < len; ++j)
    {
    if (s[i-j] != s[i+j]) break;
    }
    --j;
    if (2*j+1 > max)
    {
    max = 2*j + 1;
    sta = i - j;
    end = i + j;
    }
    for (j = 0; i-j>=0 && i+j+1 < len; ++j)
    {
    if (s[i-j] != s[i+1+j]) break;
    }
    --j;
    if (2*j > max)
    {
    max = 2 * j;
    sta = i - j;
    end = i + 1 + j;
    }
    }
    printf("%d ", max);
    for (i = sta; i <= end; ++i)
    printf("%c", ch[i]);
    printf("\n");
    }

    return 0;
    }

    最后,感觉奇偶情况分别讨论有冗余的地方,还要找更好的算法。

  • 相关阅读:
    Systemd 入门教程:实战篇
    Systemd 入门教程:命令篇
    awk详解
    yum Multilib version problems
    Oracle ORA 12541 报错解决过程
    创建表空间
    大文件按行分离脚本
    heartbeat安装与配置
    Keepalived安装配置
    速查表的名称和建表语句
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2392449.html
Copyright © 2011-2022 走看看