KMP算法(字符串)

纯模板题: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算法查找子字符串 部分内容和图片来自这三篇文章: 这篇文章、这篇文章、还有这篇他们写得非常...
    sunhaiyu阅读 1,755评论 1 21
  • 引言 字符串匹配一直是计算机科学领域研究和应用的热门领域,算法的改进研究一直是一个十分困难的课题。作为字符串匹配中...
    潮汐行者阅读 1,677评论 2 6
  • 躺在床上, 闻到了泥土的味道, 哦, 那是肉体的归宿, 皮囊终归萎缩, 灵魂也不见得都会飞升天堂, 昏暗、杂乱的世...
    井溢阅读 601评论 6 3
  • 2017年4月15日,在宁波做展。 晚上几个朋友聚会, 选在一家湘菜馆,二楼。 旁边坐了好几桌人, 大概也是聚会。...
    善木阅读 287评论 0 1
  • 发卡 红了春夏 跳绳 染了落霞 酒窝是春天的小鹿 在胸膛四海为家 塘里的鱼长了铠甲 田野的枯草种上庄稼 秋天的桂香...
    栀冰燃阅读 277评论 0 1