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;
    }
  • 相关阅读:
    Vim学习指南
    frambuffer lcd.c
    工控显示界面
    ubuntu nfs 开发板
    java初学1
    使用多态来实现数据库之间的切换
    Space Shooter 太空射击
    CandyCrush 糖果传奇
    进制转换以及原码、反码、补码
    winform小知识
  • 原文地址:https://www.cnblogs.com/xingxing1024/p/5293558.html
Copyright © 2011-2022 走看看