大致题意:
给出模式串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;
}
分享到:
相关推荐
DS串应用--KMP算法DS串应用--KMP算法DS串应用--KMP算法DS串应用--KMP算法
### 模式匹配的KMP算法详解 #### 一、KMP算法背景及传统模式匹配算法 KMP算法,即Knuth-Morris-Pratt算法,是由Donald E. Knuth、James H. Morris和Vaughan R. Pratt三位计算机科学家在1977年共同提出的一种高效的...
- **栈**:后进先出(LIFO)的数据结构,用于回溯、表达式求值等问题。 - **队列**:先进先出(FIFO)的数据结构,常见于任务调度和广度优先搜索。 - **树**:二叉树、平衡树(如AVL树和红黑树),用于高效查找、...
**栈及其应用** ...总结来说,栈、KMP算法和循环链表排序是计算机科学中重要的数据结构和算法知识,它们在解决实际问题中发挥着关键作用。理解和掌握这些概念,有助于提升编程能力和算法设计水平。
BF算法+KMP算法+马拉车算法C++实现
kmp算法内容概况: 本文将介绍一种名为KMP的字符串匹配算法。KMP算法(Knuth-Morris-Pratt算法)是一种高效的字符串匹配算法,由Donald Knuth、Vaughan Pratt和James H. Morris共同发明。KMP算法通过使用一个称为...
kmp算法内容概况: 本文将介绍一种名为KMP的字符串匹配算法。KMP算法(Knuth-Morris-Pratt算法)是一种高效的字符串匹配算法,由Donald Knuth、Vaughan Pratt和James H. Morris共同发明。KMP算法通过使用一个称为...
《KMP算法在C语言中的实现》 KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,由D.E. Knuth、V.R. Pratt和J.W. Morris三位学者提出。它解决了在主串(也叫文本串)中查找子串(也叫模式串)的问题,而...
《Python实现KMP算法:模糊文本字符串匹配》 在信息技术领域,字符串匹配是常见的操作,尤其是在文本处理、数据挖掘和搜索引擎优化中。其中,KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,它能有效地...
C++实现的KMP算法是一种在字符串中查找子串出现位置的高效算法,由Knuth、Morris和Pratt在1970年提出。KMP算法的核心在于避免了不必要的字符比较,通过预处理得到一个“部分匹配表”,在主串和模式串的匹配过程中,...
易语言KMP(Knuth-Morris-Pratt)算法模块是一个专门为易语言设计的文本处理工具,用于在字符串中高效地查找子串出现的位置。KMP算法是一种改进的字符串匹配算法,由Donald Knuth、Morris和Frank Pratt共同提出,其...
KMP(Knuth-Morris-Pratt)算法是一种在字符串中搜索子串的高效算法,由Donald Knuth、Vaughan Pratt和James Morris三位学者于1970年代提出。这个算法避免了对已匹配字符的重复比较,提高了搜索效率。Python作为一门...
KMP(Knuth-Morris-Pratt)算法是一种在文本串中查找子串出现位置的高效算法,由唐·克努斯(Don Knuth)、弗雷德里克·莫里斯(Frederick Morris)和维纳·普拉特(Vincent Pratt)在1970年提出。该算法避免了在...
KMP(Knuth-Morris-Pratt)算法是一种在文本中搜索子串的高效算法,由唐纳德·克努斯、瓦伦西亚·莫里斯和詹姆斯·普拉特于1970年提出。该算法避免了在匹配过程中不必要的回溯,极大地提高了字符串匹配的效率。...
《KMP算法要点和难点:具体应用场景》 KMP(Knuth-Morris-Pratt)算法是一种在字符串中查找子串出现位置的高效算法,由Donald Knuth、James H. Morris和 Vaughan Pratt三位学者于1970年提出。这个算法避免了在主串...
Python中的KMP(Knuth-Morris-Pratt)算法是一种高效的数据结构算法,主要用于字符串的模式匹配。在处理大量文本时,KMP算法相对于简单的暴力匹配(BF算法)有着显著的性能优势,因为它减少了不必要的字符比较,从而...
"模式匹配的KMP算法" 模式匹配的KMP算法是计算机科学领域中的一种经典算法,用于解决串的模式匹配问题。该算法可以高效地查找目标串中是否包含某个模式串,并返回模式串在目标串中的起始位置。 模式匹配的KMP算法...
算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP
《KMP算法与通配符支持在字符串匹配中的应用》 KMP算法,全称Knuth-Morris-Pratt算法,是一种高效的字符串匹配算法,它由Donald Knuth、James H. Morris和 Vaughan Pratt三位学者于1977年提出。在计算机科学中,...
KMP(Knuth-Morris-Pratt)算法是解决这一问题的一种高效方法,由D. Knuth、V. Morris和J. Pratt在1970年代提出。本资料主要探讨了KMP算法的原理、实现及应用。 KMP算法的核心思想在于避免在匹配过程中对已比较过的...