zoukankan      html  css  js  c++  java
  • poj 3461

    #include<stdio.h>
    #include<string.h>
    char s[11000],t[1100000];
    int next[11000];
    void getkmp(int len) {
        int j,k;
        next[0]=-1;
        j=0;k=-1;
        while(j<len) {
            if(k==-1||s[k]==s[j]) {
                j++;k++;
                if(s[j]!=s[k])
                    next[j]=k;
                else
                    next[j]=next[k];
            }
            else
                k=next[k];
        }
        return ;//关键点是他会把next[len]的值求出来即为本字符串中的相同数即k的值
    }
    int kmp(int lens,int lent) {
        int i,j,k=0;
        i=j=0;
        while(i<lent) {
            if(t[i]==s[j]) {
                i++;j++;
             
            }
            else {
                if(next[j]!=-1)//当j==lens时肯定会执行这一步开始比较第k+1个
                    j=next[j];
                else {
                    j=0;i++;
                
            }    
            if(j==lens)//++
                k++;
         
        }
        return k;
    }
    int main() {
        int tt,lens,lent,i;
        scanf("%d",&tt);
        while(tt--) {
            scanf("%s",s);
            scanf("%s",t);
            lens=strlen(s);
            lent=strlen(t);
            getkmp(lens);
            printf("%d ",kmp(lens,lent));
        }
        return 0;
    }
  • 相关阅读:
    Matplotlib如何绘制子图
    数据挖掘的葵花宝典
    Matplotlib如何显示中文
    python绘制WordCloud词云图
    Selenium实现微博自动化运营:关注、点赞、评论
    从小白视角理解<数据挖掘十大算法>
    Laravel模型自动转换类型
    python数据分析常用图大集合
    数据分析常见概念
    Pandas数据分析基础之时间序列
  • 原文地址:https://www.cnblogs.com/thefirstfeeling/p/4410821.html
Copyright © 2011-2022 走看看