美文网首页
KMP算法(字符串)

KMP算法(字符串)

作者: Alan66 | 来源:发表于2017-04-27 18:45 被阅读0次

纯模板题:HDU1686

#include<cstdio>
#include<cstdlib>
#include<cstring>
#define INF 1000005

int next[INF];
char a[INF],b[INF];
void getnext(char *str)
{
    int j=0;
    int len=strlen(str);
    next[0]=0;
    for(int i=1;i<len;i++)
    {
        while(j>0&&str[i]!=str[j])
              j=next[j-1];
        if(str[i]==str[j])
            j++;
        next[i]=j;
    }
}

int kmp(char *str1,char *str2)
{
    int len1=strlen(str1),len2=strlen(str2); //str1是待匹配串,str2是匹配串
    int j=0,ans=0;
    for(int i=0;i<len2;i++)
    {
        if(str1[j]!=str2[i]&&j>0)
            j=next[j-1];
        if(str1[j]==str2[i])
            j++;
        if(j==len1) //相等说明找到子串
            ans++;
    }
    return ans;

}

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s",a);
        getnext(a);
        scanf("%s",b);
        int ans=kmp(a,b);
        printf("%d\n",ans);
    }
    return 0;
}

next数组的运用(HDU3746)

#include<cstdio>
#include<cstring>
#define INF 1000005

int next[INF];
char inp[INF];
void getnext(char *a,int n)
{
    int i=0,j=next[0]=-1;
    while(i<n)
    {
        while(j!=-1&&inp[i]!=inp[j])
            j=next[j];
        i++;j++;
        next[i]=j;
    }
}

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s",inp);
        int n=strlen(inp);
        getnext(inp,n);
        int ans=n-next[n];
        if(n!=ans&&n%ans==0) printf("0\n");
        else
        {
            ans=ans-next[n]%ans;
            printf("%d\n",ans);
        }
    }
    return 0;
}

相关文章

  • KMP算法文章合集

    字符串的查找:朴素查找算法和KMP算法 暴力匹配算法与KMP算法(串的匹配) 字符串查找算法BF和KMP 字符串匹...

  • 算法(2)KMP算法

    1.0 问题描述 实现KMP算法查找字符串。 2.0 问题分析 “KMP算法”是对字符串查找“简单算法”的优化。 ...

  • KMP算法——寻找子串位置

    KMP算法——寻找子串位置 1、KMP算法简介: KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J....

  • KMP算法(字符串匹配问题)

    一、是什么? 注意,是KMP算法,不是MMP哈,我没有骂人。KMP算法是用来做字符串匹配的,除了KMP算法分,还有...

  • 字符串匹配与KMP算法

    1.朴素字符串匹配算法 2.KMP算法 求前缀函数 实现KMP算法 3.测试代码

  • KMP算法理解

    文章大纲:1.KMP算法概念2.KMP算法中最核心的next[] 数组是如何生成的3.使用KMP算法 匹配字符串 ...

  • leetcode字符串匹配算法之KMP算法

    本篇介绍一种高效的字符串匹配算法——KMP算法。 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J....

  • JavaScript 二分查找 & KMP 算法

    KMP 查找 Knuth-Morris-Pratt字符串查找算法(简称为KMP算法)可在一个主文本字符串 str1...

  • KMP算法:求next数组,一听就会

    KMP算法是啥? KMP算法就是一种字符串匹配算法,简单说就是从一个长字符串中搜索一个短字符串(也叫模式串)。这个...

  • KMP算法

    KMP算法是解决字符串匹配问题的有高效算法 代码:

网友评论

      本文标题:KMP算法(字符串)

      本文链接:https://www.haomeiwen.com/subject/fejnzttx.html