KMP练习——KMP模式匹配 一(串)

Description

求子串的next值,用next数组存放,所有输出

Input

输入一个字符串

Output

输出全部next值

Sample Input

abaabcac

Sample Output

0 1 1 2 2 3 1 2

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
void getNext(char *p,int *next)
{
    int j=0,k=-1;
    next[0]=-1;
    while(j<strlen(p)-1)
    {
        if(k==-1||p[j]==p[k])
        {
            j++;
            k++;
            next[j]=k;
        }
        else
            k=next[k];
    }
}
int main()
{
	char a[100];
	int i,next[100];
	while(gets(a))
    {
        getNext(a,next);
        cout<<next[0]+1;
        for(i=1;a[i]!=0;++i)
            cout<<" "<<next[i]+1;
        cout<<endl;
    }
	return 0;
}

KMP算法中怎样求NEXT函数,详细原理大家看看就好。。。

时间: 2024-10-20 13:04:16

KMP练习——KMP模式匹配 一(串)的相关文章

KMP算法 KMP模式匹配 二(串)

B - KMP模式匹配 二(串) Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu Description 输入一个主串和一个子串,用KMP进行匹配,问进行几趟匹配才成功,若没成功,则输出0 Input 输入一个主串和一个子串 Output 匹配的趟数 Sample Input ababcabcacbab abcac

KMP算法 KMP模式匹配 一(串)

A - KMP模式匹配 一(串) Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu Description 求子串的next值,用next数组存放,全部输出 Input 输入一个字符串 Output 输出所有next值 Sample Input abaabcac Sample Output 0 1 1 2 2 3 1

KMP &amp; 扩展KMP &amp; Manacher 专题

KMP & 扩展KMP & Manacher  专题 先来模版: void getNext(int *b,int m) { Next[0]=-1; int i=0,j=-1; while(i<m&&j<m){ if(j==-1||b[i]==b[j]) Next[++i]=++j; else j=Next[j]; } } int kmp(int *a,int *b,int n,int m) { getNext(b,m); int i=0,j=0; while(i

字符串(1)---KMP &amp; 扩展KMP &amp; Manacher

练习:点击打开链接 字符串也是ACM中的重头戏,基本内容有KMP ,扩展KMP, Manacher ,AC自动机,后缀数组,后缀自动机.按照专题来做共分三部分. LCS LIS LCIS不知道算不算....点击打开链接 小技巧:匹配问题不区分大小写,则将其全部转为小写. 暴力匹配: 用strstr函数就能解决       I M N Z(枚举长度 三份) 一.KMP算法 解决单一模式串匹配问题. 利用失配后的nxt数组减少移位,达到O(n)级别.资料自行百度. 延展: 1.求最小循环节 点击打开

KMP&amp;扩展KMP

声明 本文将不断加入例题,稍安勿躁,今天的总结争取9:30写完. KMP KMP,中文名字叫字符串匹配,用于解决一类字符串匹配问题. 先下一些定义: \(s\)表示匹配串,\(t\)表示文本串,字符串匹配用于求\(s\)在\(t\)中的出现情况. \(n\)和\(m\)分别为\(s\)和\(t\)的字符串串长. \(nxt_i\)表示对于\(s\)的前缀\(s_{1...i}\)的最长公共前后缀. 首先我们先想一想\(nxt_i\)对于求解问题有怎样的帮助. 暴力匹配 我们对于每一个\(t_i=

[kuangbin带你飞]专题十六 KMP &amp; 扩展KMP &amp; Manacher :G - Power Strings POJ - 2406(kmp简单循环节)

[kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher G - Power Strings POJ - 2406 题目: Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = "def" then a*b = "abcdef". If we think of

poj2406 kmp 求最小循环字串

Power Strings Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 47748   Accepted: 19902 Description Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = "def" then a*b = "

KMP算法(详细求串的next[n])

 怎么求串的模式值next[n]   (1)next[0]= -1  意义:任何串的第一个字符的模式值规定为-1. (2)next[j]= -1   意义:模式串T中下标为j的字符,如果与首字符 相同,且j的前面的1-k个字符与开头的1-k 个字符不等(或者相等但T[k]==T[j])(1≤k<j). 如:T="abCabCad" 则 next[6]=-1,因T[3]=T[6] (3)next[j]=k    意义:模式串T中下标为j的字符,如果j的前面k个 字符与开头的k个字符

杭电1711--Number Sequence(Kmp → → 利用Next数组求串在串中的位置)

Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 15068    Accepted Submission(s): 6606 Problem Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b