码迷,mamicode.com
首页 > 其他好文 > 详细

最长回文字串【暴力】

时间:2018-03-29 22:34:47      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:预处理   gpo   子串   alpha   for   空格   upper   首部   大小   

题目大意:

输入一个字符串,求出其中最长的回文子串。子串的含义是:在原串中连续出现的字符串片段。回文的含义是:正着看和倒着看相同,如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

最长回文字串【暴力】

标签:预处理   gpo   子串   alpha   for   空格   upper   首部   大小   

原文地址:https://www.cnblogs.com/00isok/p/8672375.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!