专栏文章

题解:AT_abc398_f [ABC398F] ABCBA

AT_abc398_f题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@mipu6yer
此快照首次捕获于
2025/12/03 18:00
3 个月前
此快照最后确认于
2025/12/03 18:00
3 个月前
查看原文
求包含字符串 SS 的最小回文串。
显然就是 SS 翻转后的后缀和 SS 的前缀最长相同串补在 SS 后面就行了,求一下 S+' '+S' 的 KMP 就行了。
CPP
struct KMP{vector<int>nxt;int n;KMP(){n=0;}KMP(string s){int j=0;n=s.size();nxt.resize(n+1);rep(2,n-1,i){while(j&&s[j+1]!=s[i])j=nxt[j];if(s[j+1]==s[i])j++;nxt[i]=j;}}};
///////////////////////////////////////////////////////////
#define Maxn 1000005 
int main()
{
    string s;
    cin>>s;
    int n = s.size();
    string t = s;
    reverse(t.begin(),t.end());
    string S = ' '+t+" "+s;
    KMP kmp(S);
    int k = kmp.nxt[n*2+1];
    // cout<<k<<" ";
    string ans;
    rep(0,n-k-1,i)ans += s[i];
    reverse(ans.begin(),ans.end());
    cout<<s+ans<<"\n";
    return 0;
}

评论

1 条评论,欢迎与作者交流。

正在加载评论...