34:回文子串
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
给定一个字符串,输出所有长度至少为2的回文子串。
回文子串即从左往右输出和从右往左输出结果是一样的字符串,比如:abba,cccdeedccc都是回文字符串。
- 输入
- 一个字符串,由字母或数字组成。长度500以内。
- 输出
- 输出所有的回文子串,每个子串一行。
子串长度小的优先输出,若长度相等,则出现位置靠左的优先输出。 - 样例输入
-
123321125775165561
- 样例输出
-
33 11 77 55 2332 2112 5775 6556 123321 165561
哎。。。作为小菜鸡,觉得这题目好难啊!
下面是c语言的代码:
#include<stdio.h>
#include<string.h>
int main()
{
char a[500];
int l,i,k,m,j;
int begin,end,flag;
while(gets(a)){
l=strlen(a);
for(i=2;i<=l;i++)
{ //使用的是枚举法,从长度为2 的子串开始
for(begin=0;begin<=l-i;begin++)
{
end=i+begin-1;
j=begin;
k=end;
flag=1; //标记开始和结束的位置
while(j<k)
{
if(a[j]!=a[k])
{
flag=0;
break;
} //常规判断回文子串的方法
j++;
k--;
}
if(flag==1)
{
for(m=begin;m<=end;m++)
printf("%c",a[m]);
printf("\n");
}
}
}
}
}