`
暴风雪
  • 浏览: 390675 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

[KMP+栈]zoj 3643:Keep Deleting

阅读更多

大致题意:
    给出模式串pat和文本串text,求最多可以从文本串中删除多少个模式串。

 

大致思路:
    设一个栈,每匹配文本串的一个字符的时候,这个字符入栈。当匹配出一个pat的时候,栈顶的和pat相匹配的串出栈,然后再由栈顶向后匹配。

 

神队友的数据一组:

ab

aabaababbbbb

 

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int nMax=705;
const int mMax=812000;
char text[mMax],pat[nMax];
int lent,lenp,next[nMax];

void get_next(){
    int i,j=-1;
    next[0]=-1;
    for(i=1;i<=lenp;i++){     //pat[j]是不是可以理解为i的前一个字符的next值所指想的字符
        while(j>-1&&pat[j+1]!=pat[i])j=next[j];
        if(pat[j+1]==pat[i])j++;
        next[i]=j;
    }
}

int num[mMax];
int stack[mMax];

int KMP(){
    int ans=0,i=0,j=-1,top=-1;
    get_next();
    for(i=0;i<lent;i++){
        stack[++top]=i;
        while(j!=-1&&pat[j+1]!=text[i]){
            j=next[j];
        }
        if(pat[j+1]==text[i])j=j+1;
        num[i]=j;
        if(j==lenp-1){
            top-=lenp;
            if(top==-1)j=-1;
            else j=num[stack[top]];
            ans++;  //找到一个匹配
        }
    }
    return ans;
}

int main(){
    while(scanf("%s%s",pat,text)!=EOF){
        memset(num,0,sizeof(num));
        lenp=strlen(pat);
        lent=strlen(text);
        printf("%d\n",KMP());
    }
    return 0;
}
 
0
5
分享到:
评论

相关推荐

    DS串应用--KMP算法

    DS串应用--KMP算法DS串应用--KMP算法DS串应用--KMP算法DS串应用--KMP算法

    模式匹配的KMP算法详解.

    ### 模式匹配的KMP算法详解 #### 一、KMP算法背景及传统模式匹配算法 KMP算法,即Knuth-Morris-Pratt算法,是由Donald E. Knuth、James H. Morris和Vaughan R. Pratt三位计算机科学家在1977年共同提出的一种高效的...

    【电子版】算法设计 中文版+英文版+习题 作者: [美]克菜因伯格 / 塔多斯

    - **栈**:后进先出(LIFO)的数据结构,用于回溯、表达式求值等问题。 - **队列**:先进先出(FIFO)的数据结构,常见于任务调度和广度优先搜索。 - **树**:二叉树、平衡树(如AVL树和红黑树),用于高效查找、...

    栈及其应用,KMP算法

    **栈及其应用** ...总结来说,栈、KMP算法和循环链表排序是计算机科学中重要的数据结构和算法知识,它们在解决实际问题中发挥着关键作用。理解和掌握这些概念,有助于提升编程能力和算法设计水平。

    字符串算法+BF算法+KMP算法+马拉车算法

    BF算法+KMP算法+马拉车算法C++实现

    KMP算法:高效字符串匹配算法详解

    kmp算法内容概况: 本文将介绍一种名为KMP的字符串匹配算法。KMP算法(Knuth-Morris-Pratt算法)是一种高效的字符串匹配算法,由Donald Knuth、Vaughan Pratt和James H. Morris共同发明。KMP算法通过使用一个称为...

    2.KMP算法:高效字符串匹配算法详解

    kmp算法内容概况: 本文将介绍一种名为KMP的字符串匹配算法。KMP算法(Knuth-Morris-Pratt算法)是一种高效的字符串匹配算法,由Donald Knuth、Vaughan Pratt和James H. Morris共同发明。KMP算法通过使用一个称为...

    KMP.rar_kmp字符串C_site:www.pudn.com

    《KMP算法在C语言中的实现》 KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,由D.E. Knuth、V.R. Pratt和J.W. Morris三位学者提出。它解决了在主串(也叫文本串)中查找子串(也叫模式串)的问题,而...

    kmp算法-基于Python+kmp算法实现模糊文本字符串匹配.zip

    《Python实现KMP算法:模糊文本字符串匹配》 在信息技术领域,字符串匹配是常见的操作,尤其是在文本处理、数据挖掘和搜索引擎优化中。其中,KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,它能有效地...

    c++ KMP 算法

    C++实现的KMP算法是一种在字符串中查找子串出现位置的高效算法,由Knuth、Morris和Pratt在1970年提出。KMP算法的核心在于避免了不必要的字符比较,通过预处理得到一个“部分匹配表”,在主串和模式串的匹配过程中,...

    易语言KMP算法模块

    易语言KMP(Knuth-Morris-Pratt)算法模块是一个专门为易语言设计的文本处理工具,用于在字符串中高效地查找子串出现的位置。KMP算法是一种改进的字符串匹配算法,由Donald Knuth、Morris和Frank Pratt共同提出,其...

    kmp算法python实现.rar

    KMP(Knuth-Morris-Pratt)算法是一种在字符串中搜索子串的高效算法,由Donald Knuth、Vaughan Pratt和James Morris三位学者于1970年代提出。这个算法避免了对已匹配字符的重复比较,提高了搜索效率。Python作为一门...

    kmp.zip_KMP_c

    KMP(Knuth-Morris-Pratt)算法是一种在文本串中查找子串出现位置的高效算法,由唐·克努斯(Don Knuth)、弗雷德里克·莫里斯(Frederick Morris)和维纳·普拉特(Vincent Pratt)在1970年提出。该算法避免了在...

    kmp算法python例子.rar

    KMP(Knuth-Morris-Pratt)算法是一种在文本中搜索子串的高效算法,由唐纳德·克努斯、瓦伦西亚·莫里斯和詹姆斯·普拉特于1970年提出。该算法避免了在匹配过程中不必要的回溯,极大地提高了字符串匹配的效率。...

    kmp算法要点和难点具体应用场景.zip

    《KMP算法要点和难点:具体应用场景》 KMP(Knuth-Morris-Pratt)算法是一种在字符串中查找子串出现位置的高效算法,由Donald Knuth、James H. Morris和 Vaughan Pratt三位学者于1970年提出。这个算法避免了在主串...

    浅谈Python描述数据结构之KMP篇

    Python中的KMP(Knuth-Morris-Pratt)算法是一种高效的数据结构算法,主要用于字符串的模式匹配。在处理大量文本时,KMP算法相对于简单的暴力匹配(BF算法)有着显著的性能优势,因为它减少了不必要的字符比较,从而...

    模式匹配的KMP算法

    "模式匹配的KMP算法" 模式匹配的KMP算法是计算机科学领域中的一种经典算法,用于解决串的模式匹配问题。该算法可以高效地查找目标串中是否包含某个模式串,并返回模式串在目标串中的起始位置。 模式匹配的KMP算法...

    KMP算法算法 KMP算法 KMP

    算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP

    KMP.rar_KMP_KMP 串匹配_KMP 支持通配符

    《KMP算法与通配符支持在字符串匹配中的应用》 KMP算法,全称Knuth-Morris-Pratt算法,是一种高效的字符串匹配算法,它由Donald Knuth、James H. Morris和 Vaughan Pratt三位学者于1977年提出。在计算机科学中,...

    字符串匹配的KMP算法.rar_KMP_KMP算法_kmp 字符串匹配_字符串匹配_文件

    KMP(Knuth-Morris-Pratt)算法是解决这一问题的一种高效方法,由D. Knuth、V. Morris和J. Pratt在1970年代提出。本资料主要探讨了KMP算法的原理、实现及应用。 KMP算法的核心思想在于避免在匹配过程中对已比较过的...

Global site tag (gtag.js) - Google Analytics