最长回文字串暴力

Posted 00isok

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最长回文字串暴力相关的知识,希望对你有一定的参考价值。

题目大意:

输入一个字符串,求出其中最长的回文子串。子串的含义是:在原串中连续出现的字符串片段。回文的含义是:正着看和倒着看相同,如abba和yyxyy。在判断时,忽略所有标点符号和空格,且忽略大小写,但输出应保持原样(在回文串的首部和尾部不要输出多余字符)。输入字符串占据一行,长度不超过5000。输出最长的回文串,如果有多个,输出起始位置最靠左的。

样例输入:Confuciuss say: Madam, I’m Adam.

样例输出:Madam, I’m Adam

 

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define MAXN 5000 + 10
char buf[MAXN], s[MAXN];
int p[MAXN]; // 记录字母在buf中的位置
int main(){
    int n, m = 0, max = 0;
    int i, j, k, x = 0, y = 0;
    fgets(buf, sizeof(buf), stdin);
    n = strlen(buf);
    //预处理字符串
    for (i = 0; i < n; i++)
        if (isalpha(buf[i]))
        {
            p[m] = i;
            s[m++] = toupper(buf[i]);
        }
    //printf("%s\n%s\n", buf, s);
    for (i = 0; i < m; i++)
        for (j = i; j < m; j++)
        {
            int ok = 1;
            for (k = i; k <= j; k++)
                if (s[k] != s[j - (k - i)]) ok = 0;
            if (ok && max < j - i + 1)
            {
                max = j - i + 1;
                x = p[i];
                y = p[j];
            }
        }
    printf("%d\n", max);
    for (i = x; i <= y; i++)
        printf("%c", buf[i]);

//    getchar();
    return 0;
}

 

2018-03-29

以上是关于最长回文字串暴力的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 05 最长回文字串

最长对称子串 (最长回文字串) pta 7-12

最长回文字串

最长回文字串

java 最长回文字串

求最长回文字串