您的位置:首页 > 编程语言

34:回文子串(1.7编程基础之字符串)

2017-09-05 16:37 330 查看

34:回文子串

总时间限制: 1000ms 内存限制: 65536kB

描述

给定一个字符串,输出所有长度至少为2的回文子串。

回文子串即从左往右输出和从右往左输出结果是一样的字符串,比如:abba,cccdeedccc都是回文字符串。

输入

一个字符串,由字母或数字组成。长度500以内。

输出

输出所有的回文子串,每个子串一行。

子串长度小的优先输出,若长度相等,则出现位置靠左的优先输出。

样例输入

123321125775165561

样例输出

33

11

77

55

2332

2112

5775

6556

123321

165561

#include <iostream>
#include<string.h>
using namespace std;
//http://noi.openjudge.cn/ch0107/34/
//我觉得第二重循环的控制j的长度很有必要
int len;
char a[550];
bool f(int x,int y,int k){
bool b=true;
if(k%2==1){//奇数偶数两种情况
while(x+2<=y){
if(a[x]!=a[y]){
b=false;
break;
}
else{
x++;y--;
}
}
}
else if(k%2==0){
while(x+1<=y){
if(a[x]!=a[y]){
b=false;
break;
}
else{
x++;y--;
}
}
}
return b;
}
int main(int argc, char *argv[]) {
cin>>a;
len=strlen(a);
for(int i=2;i<=len;i++){
for(int j=0;j<=len-i;j++){//需要仔细考虑临界值
bool b=f(j,j+i-1,i);
if(b){
for(int k=j;k<=j+i-1;k++){
cout<<a[k];
}
cout<<endl;
}
}
}
return 0;
}


9.15又写了一遍,奇数偶数情况可以一起处理

#include <iostream>
#include<string.h>
using namespace std;
//http://noi.openjudge.cn/ch0107/34/
char a[600];
int len,n,flag;
int main(int argc, char *argv[]) {
while(cin>>a){
len=strlen(a);
n=2;//循环变量
while(n<=len){
for(int i=0;i<=len-n;i++){
int end=n+i-1,k=i;
flag=0;
while(end>=k+1){
//奇数偶数情况可以一起做
if(a[k]!=a[end]){
flag=1;
break;
}
k++;end--;
}
if(!flag){
for(int j=i;j<=n+i-1;j++){
cout<<a[j];
}
cout<<endl;
}
}
n++;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编程