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;
    }

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

  • 相关阅读:
    mybatis显示sql语句 log4j.properties配置文件
    Netty 4.0 demo
    Netty多线程处理机制
    crontab定时任务中文乱码问题
    linux grep、find 命令详解
    resin access.log format配置详解
    linux top命令详解
    正则表达式介绍及案例分享
    java定时任务
    rhApp遇到的项目问题
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2392449.html
Copyright © 2011-2022 走看看