您的位置:首页 > 其它

HDU 2594 (简单KMP) Simpsons’ Hidden Talents

2014-11-26 18:12 363 查看
题意:

有两个字符串,找一个最长子串是的该串既是第一个字的前缀,又是第二个串的后缀。

分析:

把两个串并起来然后在中间加一个无关字符,求next数组即可。

#include <cstdio>
#include <cstring>

const int maxn = 50000 + 10;
char s1[maxn * 2], s2[maxn];
int next[maxn * 2], l;

void get_next()
{
int k = -1, j = 0;
next[0] = -1;
while(j < l)
{
if(k == -1 || s1[k] == s1[j])
{
k++;
j++;
next[j] = k;
}
else k = next[k];
}
}

int main(void)
{
//freopen("2594in.txt", "r", stdin);
while(scanf("%s%s", s1, s2) == 2)
{
l = strlen(s1);
int l2 = strlen(s2);
s1[l] = '#';
s1[l + 1] = '\0';
strcat(s1, s2);
l = l + l2 + 1;
get_next();
if(next[l] == 0)
{
puts("0");
continue;
}
s1[next[l]] = '\0';
printf("%s %d\n", s1, next[l]);
}

return 0;
}


代码君
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: