• poj 3461Oulipo(扩展KMP)


     查找一个模式串在其他串中出现的次数;

    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    using namespace std;
    char W[10010],T[1000010];
    int wlen,tlen;
    int nex[10010];
    void getNext()
    {
        int j,k;
        j=0;
        k=-1;
        nex[0]=-1;
        while(j<wlen)
        {
            if(k==-1||W[j]==W[k])
            {
                nex[++j]=++k;
            }
            else k=nex[k];
        }
    }
    int KMP_count()
    {
        int ans=0;
        int i,j=0;
        if(wlen==1&&tlen==1)
        {
            if(W[0]==T[0])return 1;
            else return 0;
        }
        getNext();
        for(i=0;i<tlen;i++)
        {
            while(j>0&&T[i]!=W[j])
              j=nex[j];
            if(W[j]==T[i])j++;
            if(j==wlen)
            {
                ans++;
                j=nex[j];
            }
        }
        return ans;
    }
    int main()
    {
    
        int tcase;
        scanf("%d",&tcase);
        while(tcase--)
        {
            scanf("%s%s",&W,&T);
            wlen=strlen(W);
            tlen=strlen(T);
    
            printf("%d
    ",KMP_count());
        }
        return 0;
    }
  • 相关阅读:
    Java设计模式
    Java并发编程教程
    Java 教程
    AWT
    Java编程思想
    Java.math.BigDecimal类
    Java8环境设置
    Java.util包教程
    XML
    硬盘空间术语:unallocated, unused and reserved
  • 原文地址:https://www.cnblogs.com/Fy1999/p/9637299.html
Copyright © 2020-2023  润新知