给定一个字符串,输出所有长度至少为 2 的回文子串。
回文子串即从左往右输出和从右往左输出结果是一样的字符串,比如:abba,cccdeedccc都是回文字符串。
输入格式
一个字符串,由字母或数字组成。长度 500 以内。
输出格式
输出所有的回文子串,每个子串一行。
子串长度小的优先输出,若长度相等,则出现位置靠左的优先输出。
样例输入
123321125775165561
样例输出
33
11
77
55
2332
2112
5775
6556
123321
165561
#include <stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int N=1e6+10;
char a[N];
//枚举跨越的步数
//从0开始 每次枚举相同的步数
//找到起始下标后 判断是否为回文串
void check(int s,int e) //起始下标
{
int x=s,y=e,flag=0;
while(x<=y) //判断回文串
{
if(a[x]!=a[y]) //注意不能写成x++,y-- 会怡影响下次判断
{
flag=1;
break;
}
else
{
x++;
y--;
}
}
if(!flag)
{
for(int i=s; i<=e; i++)
printf("%c",a[i]);
printf("\n");
}
}
int main()
{
scanf("%s",a);
int l=strlen(a);
for(int k=2; k<=l; k++) //回文子串长度
{
for(int i=0; i<=l-k; i++)
{
check(i,i+k-1); //起始下标
}
}
return 0;
}