题解:AT_abc398_f [ABC398F] ABCBA

· · 题解

F - ABCBA

题目大意

KMP 板子。

给定一个只包含大写英文字母的字符串 S,要求构造一个以 S 为前缀的最短回文字符串。

解题思路

**代码**: ```cpp int main(){ ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); string s; cin>>s; string r=s; reverse(r.begin(),r.end()); string c=r+"#"+s; int n=c.size(); vector<int> p(n,0); for(int i=1;i<n;i++){ int j=p[i-1]; while(j>0&&c[i]!=c[j]){ j=p[j-1]; } if(c[i]==c[j]){ j++; } p[i]=j; } int l=p.back(); string a=r.substr(l); cout<<s+a; return 0; } ```