zoukankan      html  css  js  c++  java
  • poj3461 KMP的应用

      这道题就是让你求W串在S串中出现的次数, 我们可以在W后面加一个不会出现的字符, 然后KMP每匹配到W最后一个字符的末尾就给答案加一, 然后强行让当前为和目标串不匹配即可, 代码如下:

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    char T[10000+10], S[1000000+100];
    int tlen, slen;
    int next[10000+10];
    
    void getnext(){
        int i=0, j=-1;
        next[0] = -1;
        while(i<tlen){
            if(j==-1 || T[i]==T[j]){
                ++i; ++j;
                next[i]=T[i]==T[j]?next[j]:j;
            }else j = next[j];
        }
    }
    
    int main(){
    
        int TT;
        scanf("%d", &TT);
        while(TT--){
            scanf("%s%s", T, S);
            tlen = strlen(T);
            slen = strlen(S);
            //printf("%s %d", T, tlen);
            getnext();
    //        for(int i=0; i<=tlen; i++) {
    //            printf("%d ", next[i]);
    //        }
            int res = 0;
            int i=0, j=0;
            while(i<slen){
                if(j==-1 || S[i]==T[j])
                    ++i, ++j;
                else
                    j = next[j];
                if(j==tlen) res++, j = next[tlen];
            }
            printf("%d
    ", res);
        }
        return 0;
    }
  • 相关阅读:
    HTML超链接应用场景
    String 字符串和StringBuffer的知识点总结
    猜数游戏代码
    MemoryLayout
    偏swift框架
    git的使用
    寄存器
    swift基础
    枚举
    安装Ubuntu 20.04 以后
  • 原文地址:https://www.cnblogs.com/xingxing1024/p/5293558.html
Copyright © 2011-2022 走看看