任务描述
给定一个字符串,输出所有长度至少为2的回文子串。
回文子串即从左往右输出和从右往左输出结果是一样的字符串,比如:abba,cccdeedccc都是回文字符串。
输入格式:
一个字符串,由字母或数字组成。长度500以内。
输出格式:
输出所有的回文子串,每个子串一行。
子串长度小的优先输出,若长度相等,则出现位置靠左的优先输出。
输入样例:
123321125775165561
输出样例:
33
11
77
55
2332
2112
5775
6556
123321
165561
题目来源
该题目选自OpenJudge网站,在线网址:http://noi.openjudge.cn/ch0107/34/
思路:这道题和之前做过的最长对称字串非常相似,但还是感觉把一个10分的题做麻烦了。
#include<bits/stdc++.h>
using namespace std;
struct pasub{
string r;
int len;
}a[1001];
int k=0;
bool cmp(pasub &a,pasub &b){
return a.len<b.len;
}
int main(){
string st;
getline(cin,st);
int l=st.size();
string z[501];
string w;
for(int i=0;i<l;i++){
for(int j=0;j<=i;j++){
z[j]+=st[i];
w=z[j];
reverse(w.begin(),w.end());//逆转字符串
if(w==z[j]&&w.size()>=2){
a[k].r=z[j];
a[k].len=(int)w.size();
k++;
}
}
}
sort(a,a+k,cmp);
for(int i=0;i<k;i++){
cout<<a[i].r<<endl;
}
return 0;
}