zoukankan      html  css  js  c++  java
  • nyoj-5-kmp裸题

    题目链接:

    http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=5

    kmp统计匹配串出现次数,贼尴尬好久没做字符串题目,一开始求得是文本串的next数组,后来才迷糊过来= =

    求出next数组(这个数组写法很多,正常的是保存失配后的指针去向,有时候我也会保存最长公共前缀后缀长度,,,加上有时候字符串从0/1开始,很乱)

    遍历文本串统计出现次数,当一个匹配完成之后执行  j=next[j-1]; 

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int main()
     4 {
     5     char a[15],b[1005];
     6     int n,i,j,k;
     7     int next[1005];
     8     cin>>n;
     9     while(n--){
    10         int ans=0;
    11         scanf("%s%s",a,b);
    12         int la=strlen(a);
    13         int lb=strlen(b);
    14         next[0]=0;
    15         next[1]=0;
    16         for(i=2;i<la;++i)
    17         {
    18             j=next[i-1];
    19             while(j&&a[j]!=a[i-1]) j=next[j];
    20             next[i]=a[i-1]==a[j]?j+1:0;
    21         }
    22         j=0;
    23         for(i=0;i<lb;++i)
    24         {
    25             while(j&&a[j]!=b[i]) j=next[j];
    26             if(a[j]==b[i]) j++;
    27             if(j==la){ans++;j=next[j-1];i--;}
    28         }
    29         printf("%d
    ",ans);
    30     }
    31     return 0;
    32 }
  • 相关阅读:
    Shiro权限验证
    5种设计模式整理
    多模块的SpringBoot项目
    Go使用数据库
    使用Go mod
    docker基本使用
    Go的IO操作
    实现一个网盘存储……
    Go的网络编程
    学习golang的历程
  • 原文地址:https://www.cnblogs.com/zzqc/p/8393738.html
Copyright © 2011-2022 走看看