题目描述
一个字符串是回文串,当且仅当该字符串从前往后读和从后往前读是一样的,例如,aabaa 和 ccddcc 都是回文串但 abcd 不是。
小杨有几个仅包含小写字母的字符串,他想请你编写程序判断每个字符串是否由两个长度至少为2的回文串前后拼接而成。
输入描述
第一行包含一个正整数 n,代表字符串数量。
之后n行每行一个仅包含小写字母的字符串。
输出描述
对于每个字符串输出一行,如果该字符串由两个长度至少为2的回文串前后拼接而成则输出 Yes,否则输出 No
样例输入 1
4
abcd
aabbb
aaac
abcdd
样例输出 1
No
Yes
No
No
代码
#include <bits/stdc++.h>
using namespace std;
bool hws(string a){//判断字符串是否是回文
int c;
string str="",str1="";
c=a.length()-1;
for(char b:a){
str1+=a[c];
c--;
}
return str1==a;
}
int main(){
int a,s=1;
bool flag=false;
string b,str="";
cin>>a;
for(int i=1;i<=a;i++){
cin>>b;
if(b.length()<4){
cout<<"No"<<endl;
continue;
}
for(int j=1;j<b.length()-1;j++){
str=b.substr(0,s);//截取字符串
if(hws(str)){
b.erase(0,s);
if(hws(b)){
flag=true;
break;
}
}
else{
s++;
continue;
}
}
if(flag){
cout<<"Yes"<<endl;
}
else{
cout<<"No"<<endl;
}
flag=false;
s=1;
}
return 0;
}
解释
对于第 1,3,4个字符串,都不是由两个长度至少为2的回文串前后拼接而成。
第2个字符串由回文串 aa 和 bbb 前后拼接而成,并且两个回文串长度都至少为 2。
对于全部数据,保证有1≤n≤10,并且每个字符串的长度不超过 100。
1393

被折叠的 条评论
为什么被折叠?



