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;
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM