KMP 今天药忘吃喽~ 2021-12-04 07:49 192阅读 0赞 ### KMP ### * * 输出 * 版本二 #include<bits/stdc++.h> using namespace std; const int maxn=1e2; int _next[maxn]; void initnext(string str){ int i,j; _next[0]=-1; int len = str.size(); for(i=1;i<len;i++){ j=_next[i-1]; while(str[j+1]!=str[i]&&j>=0)j=_next[j]; if(str[i]==str[j+1])_next[i]=j+1; else _next[i]=-1; } } int kmp(string str,string ptr){ int slen=str.size(),s=0; int plen=ptr.size(),p=0; initnext(ptr); while(s<slen&&p<plen){ if(str[s]==ptr[p])s++,p++; else { if(p==0)s++; else p=_next[p-1]+1; } } return p==plen?s-plen:-1; } int main(){ string a="aaassdewaaaaswed"; string b="aaaas"; string c="wef"; cout<<kmp(a,b)<<"\n"; cout<<kmp(a,c)<<"\n"; } ## 输出 ## 8 -1 # 版本二 # #include<bits/stdc++.h> using namespace std; const int maxn = 1e3+3; char str[maxn],pattern[maxn]; int fail[maxn],cnt; void getFail(char *p,int plen){ fail[0]=0;fail[1]=0; for(int i=1;i<plen;i++){ int j=fail[i]; while(j&&p[i]!=p[j])j=fail[j]; fail[i+1]=(p[i]==p[j])?j+1:0; } } int kmp(char *s,char *p){ int last = -1; int slen = strlen(s),plen=strlen(p); getFail(p,plen); int j =0; for(int i=0;i<slen;i++){ while(j&&s[i]!=p[j])j=fail[j]; if(s[i]==p[j])j++; if(j==plen){ printf("%d\n",i+1-plen); if(i-last>=plen){ //判断新的匹配和上一个匹配能否分开 cnt++; last=i; } } } } int main(){ while(~scanf("%s%s",str,pattern)){ cnt = 0; kmp(str,pattern); printf("%d\n",cnt); } }
相关 kmp算法和kmp的优化 一、kmp是什么 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简 以你之姓@/ 2023年07月13日 03:40/ 0 赞/ 25 阅读
相关 KMP (1)next\[0\]= -1 意义:任何串的第一个字符的模式值规定为-1。 (2)next\[j\]= -1 意义:模式串T中下标为j的字符,如果与首字符 相同,且 电玩女神/ 2022年07月26日 06:18/ 0 赞/ 128 阅读
相关 kmp include <iostream> include <cstdio> include <string> include <cstring> 曾经终败给现在/ 2022年06月09日 07:51/ 0 赞/ 173 阅读
相关 KMP模板 1 include <iostream> 2 include <string> 3 using namespace std; 4 / P ╰+攻爆jí腚メ/ 2021年12月20日 23:57/ 0 赞/ 202 阅读
相关 Kmp算法 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? ![bg2013050101.jpg][] 迷南。/ 2021年12月17日 11:13/ 0 赞/ 359 阅读
相关 KMP KMP 输出 版本二 include<bits/stdc++.h> using namespace std; const in 今天药忘吃喽~/ 2021年12月04日 07:49/ 0 赞/ 193 阅读
相关 KMP算法 一 KMP算法介绍 1 KMP是一个解决模式串在文本串是否出现过,如果出现过,求算出现的位置的经典算法。 2 Knuth-Morris-Pratt 字符串查找算法,简称 傷城~/ 2021年07月24日 18:29/ 0 赞/ 615 阅读
相关 kmp 如果s[i] != p[j+1] 时,令k=ne[j] ,k就是使最长前缀=后缀长度移动的最短距离 由匹配数组ne的含义可知 p[1..k] = p[j-k+1 红太狼/ 2021年06月22日 15:37/ 0 赞/ 379 阅读
相关 KMP代码 #include <stdio.h> #include <string.h> char a[] = "abababaababacb"; char b[] = ... 朱雀/ 2021年03月28日 15:32/ 0 赞/ 539 阅读
还没有评论,来说两句吧...