国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

KMP(非最大長(zhǎng)度版本)

2019-11-10 23:21:03
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

KMP(非最大長(zhǎng)度版本)

模板1:

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int next[10];int nextval[10];void getnext(char *p,int next[]){ int plen=strlen(p); next[0]=-1; int k=-1; int j=0; while(j<plen-1) { if(k==-1||p[j]==p[k]) next[++j]=++k; else k=next[k]; }}//優(yōu)化后的next數(shù)組,不能允許p[j]=p[next[j]]void getnextval(char *p,int nextval[]){ int plen=strlen(p); nextval[0]=-1; int k=-1; int j=0; while(j<plen-1) { if(k==-1||p[j]==p[k]) { ++j;++k; if(p[j]!=p[k]) nextval[j]=k; else nextval[j]=nextval[k]; } else k=nextval[k]; }}//kmp的整體時(shí)間復(fù)雜度為O(m+n),m和n分別為模式串和文本串的長(zhǎng)度int kmp(char *s,char *p){ int i=0,j=0; int slen=strlen(s),plen=strlen(p); while(i<slen&&j<plen) { if(j==-1||s[i]==p[j]) i++,j++; else j=next[j]; } if(j==plen) return i-j;//模式串第一次在文本串中出現(xiàn)的位置 else return -1;}int main(){ char ch[10]; char s[50]; while(cin>>ch>>s) { getnext(ch,next); getnextval(ch,nextval); for(int i=0;i<strlen(ch);i++) { cout<<next[i]<<" "; } cout<<endl; for(int i=0;i<strlen(ch);i++) { cout<<nextval[i]<<" "; } cout<<endl; cout<<kmp(s,ch)<<endl; } return 0;}

模板2:

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int fail[30];void getfail(char *p){ int plen=strlen(p); 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]; if(p[i]==p[j]) fail[i+1]=j+1; else fail[i+1]=0; }}void kmp(char *s,char *p){ int slen=strlen(s); int plen=strlen(p); int j=0;//當(dāng)前結(jié)點(diǎn)編號(hào) for(int i=0;i<slen;i++)//文本串當(dāng)前指針 { while(j&&p[j]!=s[i])//順著失配邊走,直到可以匹配 j=fail[j]; if(p[j]==s[i]) j++; if(j==plen) { cout<<"find at position "<<i-plen+1<<endl; j=fail[j]; } }}int main(){ char ch[30]; char s[50]; while(cin>>ch>>s) { getfail(ch); for(int i=0;i<=strlen(ch);i++) { cout<<fail[i]<<" "; } cout<<endl; kmp(s,ch); } return 0;}
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 额敏县| 酉阳| 灵川县| 聂拉木县| 左权县| 镇赉县| 颍上县| 永和县| 陕西省| 栾川县| 观塘区| 吴江市| 乡城县| 吴川市| 墨竹工卡县| 三穗县| 遂宁市| 咸宁市| 湖南省| 木兰县| 基隆市| 武宣县| 桦川县| 天峨县| 宜兰市| 巴林左旗| 申扎县| 仪征市| 镇赉县| 阜宁县| 陈巴尔虎旗| 保山市| 横峰县| 武宁县| 汝阳县| 梓潼县| 安阳县| 汉中市| 武乡县| 五家渠市| 澄迈县|