临汾山东漯河饰品美体美文
投稿投诉
美文创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品
漯河衢州
兴义眉山
桂林阳泉
玉溪简阳
山东遂宁
永城新余
梧州洛阳
泸州温州
临汾清远
营口常熟
浙江大连
桐乡宜昌

图解KMP字符串匹配算法

1月17日 火凤派投稿
  kmp算法跟之前讲的bm算法思想有一定的相似性。之前提到过,bm算法中有个好后缀的概念,而在kmp中有个好前缀的概念,什么是好前缀,我们先来看下面这个例子。
  观察上面这个例子,已经匹配的abcde称为好前缀,a与之后的bcde都不匹配,所以没有必要再比一次,直接滑动到e之后即可。
  那如果前缀中有互相匹配的字符呢?
  观察上面这个例子,这个时候如果我们直接滑到好前缀之后,则会过度滑动,错失匹配子串。那我们如何根据好前缀来进行合理滑动?
  其实就是看当前的好前缀的前缀和后缀是否有匹配的,找到最长匹配长度,直接滑动。鉴于不止一次找最长匹配长度,我们完全可以先初始化一个数组,保存在当前好前缀情况下,最长匹配长度是多少,这时候我们的next数组就出来了。
  我们定义一个next数组,表示在当前好前缀下,好前缀的前缀和后缀的最长匹配子串长度,这个最长匹配长度表示这个子串之前已经匹配过匹配了,不需要再次进行匹配,直接从子串的下一个字符开始匹配。
  我们是否每次算next〔i〕时都需要每一个字符进行匹配,是否可以根据next〔i1〕进行推导以便减少不必要的比较。
  带着这个思路我们来看看下面的步骤:
  假设next〔i1〕k1;
  如果modelStr〔k〕modelStr〔i〕则next〔i〕k
  如果modelStr〔k〕!modelStr〔i〕,我们是否可以直接认定next〔i〕next〔i1〕?
  通过上面这个例子,我们可以很清晰地看到,next〔i〕!next〔i1〕,那当modelStr〔k〕!modelStr〔i〕时候,我们已知next〔0〕,next〔1〕next〔i1〕,如何推导出next〔i〕呢?
  假设modelStr〔xi〕是前缀后缀能匹配的最长后缀子串,那么最长匹配前缀子串为modelStr〔0ix〕
  我们在求这个最长匹配串的时候,他的前面的次长匹配串(不包含当前i的),也就是modelStr〔xi1〕在之前应该是已经求解出来了的,因此我们只需要找到这个某一个已经求解的匹配串,假设前缀子串为modelStr〔0ix1〕,后缀子串为modelStr〔xi1〕,且modelStr〔ix〕modelStr〔i〕,这个前缀后缀子串即为次前缀子串,加上当前字符即为最长匹配前缀后缀子串。
  代码实现
  首先在kmp算法中最主要的next数组,这个数组标志着截止到当前下标的最长前缀后缀匹配子串字符个数,kmp算法里面,如果某个前缀是好前缀,即与模式串前缀匹配,我们就可以利用一定的技巧不止向前滑动一个字符,具体看前面的讲解。我们提前不知道哪些是好前缀,并且匹配过程不止一次,因此我们在最开始调用一个初始化方法,初始化next数组。
  1。如果上一个字符的最长前缀子串的下一个字符当前字符,上一个字符的最长前缀子串直接加上当前字符即可
  2。如果不等于,需要找到之前存在的最长前缀子串的下一个字符等于当前子串的,然后设置当前字符子串的最长前缀后缀子串int〔〕初始化next数组parammodelStrpublicvoidinit(char〔〕modelStr){首先计算next数组遍历modelStr,遍历到的字符与之前字符组成一个串nextnewint〔modelStr。length〕;intstart0;while(startmodelStr。length){next〔start〕this。recursion(start,modelStr);}}parami当前遍历到的字符returnprivateintrecursion(inti,char〔〕modelStr){next记录的是个数,不是下标if(0i){return0;}intlastnext〔i1〕;没有匹配的,直接判断第一个是否匹配if(0last){if(modelStr〔last〕modelStr〔i〕){return1;}return0;}如果last不为0,有值,可以作为最长匹配的前缀if(modelStr〔last〕modelStr〔i〕){returnnext〔i1〕1;}当next〔i1〕对应的子串的下一个值与modelStr不匹配时,需要找到当前要找的最长匹配子串的次长子串依据就是次长子串对应的子串的下一个字符modelStr〔i〕;inttempIwhile(tempIndex0){lastnext〔tempIndex1〕;找到第一个下一个字符是当前字符的匹配子串if(modelStr〔last〕modelStr〔i〕){returnlast1;}tempI}return0;}
  然后开始利用next数组进行匹配,从第一个字符开始匹配进行匹配,找到第一个不匹配的字符,这时候之前的都是匹配的,接下来先判断是否已经是完全匹配,是直接返回,不是,判断是否第一个就不匹配,是直接往后面匹配。如果有好前缀,这时候就利用到了next数组,通过next数组知道当前可以从哪个开始匹配,之前的都不用进行匹配。publicintkmp(char〔〕mainStr,char〔〕modelStr){开始进行匹配inti0,j0;while(imodelStr。lengthmainStr。length){while(jmodelStr。length){找到第一个不匹配的位置if(modelStr〔j〕!mainStr〔i〕){}i;j;}if(jmodelStr。length){证明完全匹配}走到这里找到的是第一个不匹配的位置if(j0){i;}从好前缀后一个匹配jnext〔j1〕;}return1;}
投诉 评论

80级以后攻略到了80级,区内大部分人等级应该都差不多了,此时游戏才刚刚开始80级以后,人人都有80了,这时候就要看你的英雄和部件,所以80级以后才是真正的较量升职业天赋职……你喝的绿豆汤,到底是红色还是绿色?炎热的夏季里,很多家庭会熬上一盆绿豆汤放在冰箱里冷藏起来,口渴的时候喝上一碗,爽口又消暑。不过,就是这碗平平常常的绿豆汤,究竟是绿的还是红的呢?除了颜色,围绕绿豆汤还有很多说法……英雄跑者,何不用英雄S1蓝牙耳机相伴?入秋之后,我开始和小伙伴相约跑步了,据说跑步是对过敏性鼻炎有缓解作用的。跑了几天我真的佩服那些常年坚持跑步的朋友,觉得他们是当之无愧的英雄,因为每天光是清晨起床就很难了,再冒着……大衣哥新亲家母成网红,身材高挑,长得年轻漂亮近日,大衣哥朱之文的儿子朱单伟与邻村女孩陈萌订婚,朱单伟与陈萌经人介绍认识,两人相识不久就选择订婚,根据了解陈萌是一位老师,颜值和学历都不错,与朱单伟订婚后她也成为全国人民关注……适合在春季吃的几种蔬菜!营养美味春季蔬菜各种各样,时令蔬菜正当鲜。今天分享4种被人忽视的蔬菜,营养价值高,多吃好处大!赶紧收藏下来吧荠菜荠菜不仅味美可口,而且营养丰富,含有蛋白质、膳食纤维、……科学家开发全新膜技术提高了碳捕集效率科学家们已经开发出一种新的膜技术,可以更有效地去除混合气体中的二氧化碳(CO2),如发电厂的排放物。这项新技术论文作者表示,为了证明这种新膜的能力,他们研究了二氧化碳和氮……最多扣除12000元!个人养老金抵扣个税新政出炉,业内人士利本文来源:时代财经作者:余思毅事关个人养老金的又一重大安排落定了!9月27日,国常会会议内容提到,会议决定,对政策支持、商业化运营的个人养老金实行个人所得税优惠:对……整容界的天花板!盘点靠整容实现逆天改命的明星不多说,大宝贝和四千年必须是最典型性的代表,她俩堪称明星整容界的天花板,通过整容实现了逆天改命!一个从香港嫩模晋升女顶流,一个从普通女孩成为女团门面担当。杨颖……图解KMP字符串匹配算法kmp算法跟之前讲的bm算法思想有一定的相似性。之前提到过,bm算法中有个好后缀的概念,而在kmp中有个好前缀的概念,什么是好前缀,我们先来看下面这个例子。观察上面这个例……眼部拨筋的好处和坏处通过正确的眼部拨筋手法去护理眼周,可以改善眼部黑眼圈,减轻眼袋,缓解视觉疲劳以及减少眼部脂肪颗粒形成的作用。事物都有两面性,那么频繁对眼部进行拨筋又有哪些坏处呢?南宁美容职业培……明年,手机真的要大变样了LG彻底退出智能手机业务的三个月前,曾在CES表示其已经制造了一款屏幕可拉伸的手机,名为LGRollable。当时官方只给出了一个简短预告,并未展示真机。不过,LG……以太坊合并,大量矿卡集体翻新后流出,如何才能不购买到矿卡9月15日按相关媒体报道,以太坊近期完成了所谓的合并,也就是完成了大规模改造,第二大加密货币的核心数字机器正在被转移到了宣称更加节能的系统。本质上是将PoW机制(工作量证……
治疗前列腺增生,中医常用的三大方法,摆脱各种原因出现的尿不畅小徽章玩出大学问!方寸之间凝结冬奥时光世界杯离奇庆祝!美女撩上衣,非洲人街头打砸烧,千米国旗抢风头公司起名应注意哪些?诺基亚新N73渲染图效仿苹果被咬一口,冲击高端与iPhone加速向大兆瓦迭代,全国首个6MW以上陆上风电项目全部并网新能源汽车产业全国一盘棋,西上海全国布局潜力巨大iPad10耐用性测试惨遭一掰两半!质量堪忧足球报若申花真降级了,对中国职业足球来说无疑是灾难性事件智墨晨读6月6日突发!无限期离队!他要去联手东契奇了?渐行渐远,心淡淡,就这样吧找好你人生中的转折点作文我心爱的台灯杨幂baby美艳亮相,蔡徐坤李易峰杨洋李现张艺兴比帅潭溪山游记冬天汽车正确开空调方法冬天汽车如何正确开空调张建国石毅:推进收入分配改革需要什么角化造句用角化造句大全法甲1近4轮仅1胜唐明皇与杨贵妃的故事唐明皇为何赐死杨贵妃股权质押借款合同需要注意什么虫草花煲汤怎么做?这些食材和虫草花一起炖汤竟然可以这么补!儿童陶瓷餐具能用开水煮吗

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找