4643: 【GESP2409三级】回文拼接

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:17 解决:5

题目描述

⼀个字符串是回⽂串,当且仅当该字符串从前往后读和从后往前读是一样的,例如,aabaaccddcc 都是回文串,但abcd 不是。
小杨有$n$ 个仅包含小写字母的字符串,他想请你编写程序判断每个字符串是否由两个长度至少为$2$ 的回文串前后拼接而成。

输入

第一行包含一个正整数$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;
}