【数据结构】KMP
迪丽瓦拉
2025-06-01 18:00:59
0次

目录

一:简介

二:实现

三:next数组的解释

四:优化


一:简介

 KMP算法是一种字符串匹配算法,可以在 O(n+m)的时间复杂度内实现两个字符串的匹配。
所谓字符串匹配,是这样一种问题:“字符串 P 是否为字符串 S 的子串?如果是,它出现在 S 的哪些位置?” 其中 S 称为主串;P称为模式串。

 

如果暴力就是O(n*m),两个for循环,ij同时动。

二:实现

 

#include 
using namespace std;#define MAXLEN 225typedef struct
{char ch[MAXLEN];int length;
} String;void get_next(String T,int next[])
{int i=1,j=0; //i领先一个位置next[1]=0;while(iT.length) return i-T.length; //不需要+1,因为while1循环退出之前i++,用来while循环判断了else return 0;
}int main()
{String s1,s2; //s1母串,s2子串char a[MAXLEN],b[MAXLEN];cout<<"输入母串:"<>s1.ch+1;s1.length=strlen(s1.ch)-1;cout<<"输入子串:"<>s2.ch+1;s2.length=strlen(s2.ch)-1;int next[MAXLEN];get_next(s2,next);cout<<"next数组如下"<

三:next数组的解释

  1.  j是短字符串的指针,i是长字符串;
  2. next数组只看短字符串,next[j]=1到j-1的最长前后相等缀+1;
  3. 默认next[1]=0;next[2]=1;

如下图:j=4,j前面即j-1到1的子串为aba,最长前后相等缀为a即1,next[4]=1+1=2

               j=6,j前面即j-1到1的子串为abaab,最长前后相等缀为ab即2,next[6]=2+1=3

四:优化

puls优化nextval[j]数组:

        当已经出现过一个字母时,eg:a,则令nextval[3]=next[1]=0

                                                    eg:b,则令nextval[4]=next[2]=1 

        j指针就不用重复遍历已出现的a、b了

这里写的是直接改好的val数组

#include 
using namespace std;#define MAXLEN 225typedef struct
{char ch[MAXLEN];int length;
} String;int  Index_KMP(String S,String T,int next[])
{int i=1,j=1;while(i<=S.length&&j<=T.length){if(j==0||S.ch[i]==T.ch[j]){i++,j++;//匹配成功,i和j向后移动}else{j=next[j];//j回调可以直接匹配的位置}}if(j>T.length) return i-T.length; //不需要+1,因为while1循环退出之前i++,用来while循环判断了else return 0;
}void get_nextval(String T,int nextval[])
{int i=1,j=0;while(i>s1.ch+1;s1.length=strlen(s1.ch)-1;cout<<"输入子串:"<>s2.ch+1;s2.length=strlen(s2.ch)-1;int next[MAXLEN];get_nextval(s2,next);cout<<"nextval数组如下"<

 

动画演示

相关内容

热门资讯

家国同框 | 佳节乡村游,我在... 朱明 摄家国同框 | 佳节乡村游,我在记录家国同框 | 佳节乡村游,我在记录家国同框 | 佳节乡村游...
双节无障碍文旅升温,多地景区探... 本报(chinatimes.net.cn)记者李氏琼 北京报道“您好,我们这里有免费提供的轮椅,请问...
吕梁碛口景区发布紧急提醒 尊敬的游客朋友:截至目前,碛口景区游客接待量已达到景区上限。为确保游览体验和旅游安全,请广大游客及时...
中英旅游,向文化体验更深处去 在英国泰晤士河畔,议会大厦、大本钟前,举着手机拍照的中国游客络绎不绝。有人拿出封面印有大本钟照片的高...
成都高新区“欢庆国庆·艺彩芳华... 封面新闻记者 易弋力10月5日,由成都高新区商务文化旅游局指导的“欢庆国庆·艺彩芳华”2026年高新...
花溪湖:山水之间见证城市蝶变 如今的花溪湖,波光潋滟,草木环生,已然是市民闲暇时散心休闲的好去处。岁月流转,这片水域迎来全新的蜕变...
单日游客突破2000人次!X科... 国庆假期进入第四天,位于经济区的X科幻谷·星际未来园区客流持续攀升,单日游客接待量突破2000人次,...
不夜重庆·打卡夜经济地标丨夜购... 编者按:夜经济,是城市活力的鲜活底色,也是重庆聚力建设国际消费中心城市的新引擎。国庆假期,上游新闻推...
10月1日至4日,湖北A级旅游... 10月4日晚,湖北省文化和旅游厅公布2026年国庆节第四天全省假日文旅市场情况:全省大部分地区天气由...
辽宁朝阳文旅赴京,邀请北京游客... 10月3日,正值国庆黄金周出游热潮高涨之际,辽宁省朝阳市文化旅游和广播电视局携全域优质文旅资源、特色...