C语言-最牛的回文

来源:百度知道 编辑:UC知道 时间:2024/06/06 06:09:58
据说,如果有无穷多的母牛和无穷多的大型键盘,它们就可以创造出世界上最伟大的回文。在寻找回文时,可以不计文中的标点、空白和大小写,只要关注 26 个英文字母就可以了。但是要注意,在输出时要按照原样,也就是要保留原有的空白、标点和大小写。

你的任务,就是在不超过 20000 个字符的字符串中,寻找长度不超过 2000 的回文字符串(含空格和标点时)。

输入格式
一段文本,不超过 20000 个字符,可以有一行或多行,每行的长度不超过 80 个字符。

输出格式
输出的第一行为找到的最长的回文字符串的长度。后面的行应该包括该字符串,字符串两边多余的空格和标点都不需要输出,但字符串中的空格、标点和换行则需要按照原样输出。

如果文中有多个长度相同的回文字符串,只要输出第一个就可以了。
测试输入:Sonic: Makam, I'm Akam.
期待的输出:
11
Makam, I'm Akam
回车不算在“空格和标点”之内
不会超过100行吧

用有穷状态积做, 代码不超过200h, 代码找来找去没找到-_-!
=============================================================
随便写了一个, 还有些细节方面的自己改吧
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_LEN 20000
#define MAX_WORD_LEN 2000

char* remove_sign(char* word)
{
int len = strlen(word);
int i;/*
for(i = 0; i < len; i++)
{
if(word[i] != ' ')
break;
else
word = word+1;
}*/
for(i = len - 1; i >= 0; i--)
{
if(word[i] == '.' || word[i] == '?' || word[i] == '!')
{
word[i] = '\0';
}
else
{
break;
}
}

printf("after remove sign word is %s\n", word);
return word;
}

int get_first_word(char* all_word)
{
int all_word_len = strlen(all_word);
char get_word[MAX_WORD_LEN];