2295: KMP模式匹配 一(串)

2295: KMP模式匹配 一(串)

时间限制: 1 Sec  内存限制: 128 MB
提交: 210  解决: 97
[提交][状态][讨论版][命题人:外部导入]

题目描述

求子串的next值,用next数组存放,全部输出

输入

输入一个字符串

输出

输出所有next值

样例输入

abaabcac

样例输出

0 1 1 2 2 3 1 2

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 10010;
int len;
void getnext(char s[maxn], int next[maxn])
{
    len = strlen(s);
    int i = 0, j = -1;
    next[0] = -1;
    while(i < len)
    {
        if(j == -1 || s[i] == s[j])
        {
            i++;
            j++;
            next[i] = j;
        }
        else
            j = next[j];
    }
}
int main()
{
    char a[maxn];
    int next[maxn];
    int i;
    cin >> a;
    len = strlen(a);
    getnext(a, next);
    for(i = 0; i < len - 1; ++i)
    {
        printf("%d ", next[i] + 1);
    }
    printf("%d", next[i] + 1);
    return 0;
}