Codeforces Global Round 7 D1. Prefix-Suffix Palindrome (Easy version)(字符串)

题意:

取一字符串不相交的前缀和后缀(可为空)构成最长回文串。

思路:

先从两边取对称的前后缀,之后再取余下字符串较长的回文前缀或后缀。

#include <bits/stdc++.h>
using namespace std;
bool ok(const string &s,int l,int r){
    while(l<=r&&s[l]==s[r]) ++l,--r;
    return l>r;
}
void solve(){
    string s;cin>>s;
    int l=0,r=s.size()-1;
    while(l<r&&s[l]==s[r]) ++l,--r;
    int r2,l2;
    for(r2=r;r2>=l;r2--) if(ok(s,l,r2)) break;
    for(l2=l;l2<=r;l2++) if(ok(s,l2,r)) break;
    cout<<s.substr(0,l)
        <<((r2-l>r-l2)?s.substr(l,r2-l+1):s.substr(l2,r-l2+1))
        <<s.substr(r+1)
        <<"\n";
}
int main()
{
    int t;cin>>t;
    while(t--)
        solve();
    return 0;
}

 

posted @ 2020-03-20 01:30  Kanoon  阅读(526)  评论(3编辑  收藏  举报