8.21 问题 F: #103. 子串查找

来源:互联网 发布:java平方怎么表示 编辑:程序博客网 时间:2024/05/19 12:38

问题 F: #103.子串查找


题目描述

这是一道模板题。

给定一个字符串 A和一个字符串 B,求 B  在 A 中的出现次数。

A中不同位置出现的 B 可重叠。

输入

输入共两行,分别是字符串 A 和字符串 B。

输出

输出一个整数,表示 B 在 A 中的出现次数。

样例输入

zyzyzyz

zyz

样例输出

3

提示

 


1≤A,B 的长度 ≤106 ,A 、B 仅包含大小写字母。 

 


简单KMP模板水题。

因为之前写KMP时next数组有两个计算方式,记得时候记混了,导致错了几次。


#include<stdio.h>#include<string.h>int next[1010000];char s1[1010000],s2[1010000];int main(){    int i,j,k,m,n,a,b;    memset(s1,0,sizeof(s1));    memset(s2,0,sizeof(s2));    while(scanf("%s%s",s1,s2)!=EOF)    {        memset(next,0,sizeof(next));        m=strlen(s1);        n=strlen(s2);        i=1;j=0;        while(i<n)//计算next数组        {            if(s2[i]==s2[j])            {        //      printf("%c   %c\n",s1[i],s1[j]);                i++;                j++;                next[i-1]=j;//注意这一点赋值顺序是在i++和j++之前还是之后            }            else if(j==0&&s2[i]!=s2[j])            {    //              printf("%c   %c\n",s1[i],s1[j]);                i++;            }            else if(j>0&&s2[i]!=s2[j])            {        //      printf("%c   %c\n",s1[i],s1[j]);                j=next[j-1];            }        }//      for(i=0;i<=n;i++)//      {//          printf("%d ",next[i]);//      }//      printf("\n");        i=0;j=0;        int f=0;        while(i<m)//KMP算法        {            if(s1[i]==s2[j])            {            //  printf("%c  %c  i=%d  j=%d\n",s1[i],s2[j],i,j);                i++;                j++;            }            else if(j==0&&s1[i]!=s2[j])            {            //  printf("%c  %c  i=%d  j=%d\n",s1[i],s2[j],i,j);                i++;            }            else if(j>0&&s1[i]!=s2[j])            {            //  printf("%c  %c  i=%d  j=%d\n",s1[i],s2[j],i,j);                j=next[j-1];            }            if(j==n)//当j==n时表示第二个字符串在第一个字符串中出现一次            {            //  printf("%d\n",i);                j=next[j-1];                f++;            }        }        printf("%d\n",f);    }    return 0;}




原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 qq冻结了至尊宝怎么办 至尊宝没办法申诉怎么办 至尊宝qq被冻结怎么办 未满16岁怎么办手机卡 联想预装的office卸载怎么办 win10激活后无法启动怎么办 移动电话卡没用了没注销怎么办 快捷快递客服热线一直打不通怎么办 牛奶乳加钙咀嚼片吃多了怎么办 三生骗了我该怎么办 国珍产品新时代卡怎么办 三个月大的宝宝对眼怎么办 9月大婴儿眼睛对眼怎么办 30岁眼部有皱纹怎么办 才24岁眼部皱纹怎么办 被双开后以前的养老保险怎么办 尚赫辟谷期间来月经怎么办 保险公司给代理人奖金迟发怎么办 比亚迪f3烧机油怎么办 支付宝刷脸认证老失败怎么办 融e借没密码器怎么办 融e购不显示积分怎么办 王者荣耀区满了怎么办 苹果4s储存不够怎么办 乐视2费电超级快怎么办 支付宝手机订单号查不到怎么办 淘宝几个订单同一个快递单号怎么办 工商银行u盾丢了怎么办 银行不让开u盾怎么办 手机u盾识别不了怎么办 绿森商城不退款怎么办 电信手机号码过户积分清零怎么办 被电话诈骗骗了怎么办 诈骗电话骗了钱怎么办 被网友骗了一千块钱怎么办 被网友骗了1000块怎么办 微信红包被骗100怎么办 3m投资钱要不回来怎么办 手机照片超过3m怎么办 小说大于3m看不了怎么办 携程订单删除了怎么办