王也枉不了 2021-05-12 18:38 采纳率: 33.3%
浏览 24
已采纳

现在1000ms怎么提到500ms来过oj

#include<bits/stdc++.h>

using namespace std;

int KMP(string str,string p)

{    int count = 0;

    int k=-1,j=0,next[p.length()];

    next[0]= -1;



     while(j<p.length())

         if(k==-1||p[j]==p[k])

             next[++j] = ++k;

         else k=next[k];

            int q=0,e=0;



    while(e<p.length())

    {      if(p[e]==str[q])

        {

            e++; 

            q++;     

        }

        else    e=next[e];

  

      if(e==-1)

        {

          e++;

          q++;

        }



        if(q>=str.length()&&e<p.length())return count;

        else if(q>=str.length()&&e>=p.length())return count+1;

        else if(q<str.length()&&e>=p.length())

        {

    count++;

    q=q-e+1;

    e=0;

        }  

  }

}

int main()

{

    string str,p;

 cin>>str>>p;

    printf("%d",KMP(str,p));

    system("pause"); 



}

题目是

 

子串查找
Description

给定一个字符串AA和一个字符串BB,求BB在AA中的出现次数。AA和BB中的字符均为英语大写字母或小写字母。

AA中不同位置出现的BB可重叠。


Input
输入共两行,分别是字符串AA和字符串BB 。


Output
输出一个整数,表示BB在AA中的出现次数。


Sample Input 1 

zyzyzyz
zyz
 

1≤A,B的长度≤10^6   AA、BB仅包含大小写字母。
 

  • 写回答

4条回答 默认 最新

  • 源代码大师 博客专家认证 2021-05-12 18:54
    关注

    先判断后循坏比较好,望采纳,不懂的可以关注私信我。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 vue请求不到数据,返回状态200,数据为html
  • ¥15 访问url时不会自动调用其 Servlet的doGet()
  • ¥15 用白鹭引擎开发棋牌游戏的前端为什么这么难找
  • ¥15 MATLAB解决问题
  • ¥35 哪位专业人士知道这是什么原件吗?哪里可以买到?
  • ¥15 关于#c##的问题:treenode反序列化后获取不到上一节点和下一节点,Fullpath和Handle报错
  • ¥15 一部手机能否同时用不同的app进入不同的直播间?
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享