kmp求最短的回文字符串light OJ1258

题目链接https://vjudge.net/contest/315202#problem/K

给一个字符串,在它右边添加字符,把它变为一个回文串,问这个回文串的最小长度

这个题有点难想到用kmp。

把它反转之后的字符串作为模式串,去和原字符匹配。找出能够匹配的字符个数x,不能匹配的个数len-x,答案就是len+len-x

但是匹配的时候,不是求最大的相同子串长度。因为最大的子串可能在字符串的中间产生。而这题很明显是求前后的最大匹配个数

没有意识到这一点,我一直wa。。。

#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
char s[1000005],re[1000005];
int Next[1000005],n;
void getnext()
{
    int i=0,j=-1;
    Next[0]=-1;
    while(i

 

你可能感兴趣的:(ACM的人生)