4643: 【GESP2409三级】回文拼接
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:17
解决:5
题目描述
⼀个字符串是回⽂串,当且仅当该字符串从前往后读和从后往前读是一样的,例如,
小杨有$n$ 个仅包含小写字母的字符串,他想请你编写程序判断每个字符串是否由两个长度至少为$2$ 的回文串前后拼接而成。
aabaa 和ccddcc 都是回文串,但abcd 不是。小杨有$n$ 个仅包含小写字母的字符串,他想请你编写程序判断每个字符串是否由两个长度至少为$2$ 的回文串前后拼接而成。
输入
第一行包含一个正整数$n$ ,代表字符串数量。
之后$n$ 行每行一个仅包含小写字母的字符串。
之后$n$ 行每行一个仅包含小写字母的字符串。
输出
对于每个字符串输出一行,如果该字符串由两个长度至少为$2$ 的回文串前后拼接而成则输出
Yes,否则输出 No。
样例输入 复制
4
abcd
aabbb
aaac
abcdd
样例输出 复制
No
Yes
No
No
提示
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, k;
cin >> n;
for (int i = 1; i <= n; i++) {
string s;
cin >> s;
int m = s.length();
int fl = 0;
for (int j = 2; j <= m - 2; j++) {
string s1 = s.substr(0, j);
string s2 = s.substr(j, m - j);
string t1 = "", t2 = "";
for (int k = (int) s1.size() - 1; k >= 0; k--) t1 += s1[k];
for (int k = (int) s2.size() - 1; k >= 0; k--) t2 += s2[k];
if (t1 == s1 && t2 == s2) {
fl = 1;
break;
}
}
if (fl) cout << "Yes\n";
else cout << "No\n";
}
return 0;
}