日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

KMP学习

發(fā)布時(shí)間:2023/12/4 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 KMP学习 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

從頭到尾徹底理解KMP

字符串匹配的KMP算法

KMP算法的Next數(shù)組詳解

package leetcode;import java.util.Arrays;public class ImplementStrStr {public int strStr(String haystack, String needle) {if(haystack==null||needle==null)return -1;return haystack.indexOf(needle);}public int[] getNext(String str){int []preFix=new int[str.length()];int i=0;for(i=1;i<str.length();i++){int k=preFix[i-1];while(k!=0&&str.charAt(i)!=str.charAt(k))//從已經(jīng)匹配過(guò)的字符串后綴在查找最大匹配k=preFix[k-1];if(str.charAt(i)==str.charAt(k)){k++;preFix[i]=k;}else{preFix[i]=0;}}return preFix;}public int indexOf(String haystack,String needle){int heyLength=haystack.length();int needLength=needle.length();int i=0;int j=0;while(i<heyLength&&j<needLength){if(haystack.charAt(i)==needle.charAt(j)){i++;j++;}else{i=i+1-j;j=0;}}if(j==needLength){return i-j;}else{return -1;}}public int indexOf2(String haystack,String needle){int heyLength=haystack.length();int needLength=needle.length();if(needLength==0){return 0;}int i=0;int j=0;int pre[]=getNext(needle);while(i<heyLength&&j<needLength){while(j>0&&haystack.charAt(i)!=needle.charAt(j)){j = pre[j-1];}if(haystack.charAt(i)==needle.charAt(j)){j++;}i++;if(j==needLength){return i-j;}}return -1;}public int[] next(String param){int[] next=new int[param.length()];next[0]=-1;int length=param.length();int i=0;int j=-1;while(i<length-1){if(j==-1||param.charAt(i)==param.charAt(j)){next[++i]=++j;}else{j=next[j];}}return next;}public int kmp(String str,String param){if(null==str||null==param){return -1;} int[] next=next(param);int strLength=str.length();int paramLength=param.length();int i=0;int j=0;while(i<strLength&&j<paramLength){if(j==-1||str.charAt(i)==param.charAt(j)){i++;j++;}else{j=next[j];}}if(j==paramLength){return i-j;}else{return -1;}}public static void main(String[] args) {ImplementStrStr i=new ImplementStrStr();System.out.println(i.indexOf2("abc", ""));System.out.println(i.indexOf2("a", "a")); // System.out.println(i.indexOf2("mississippi","pi"));System.out.println(i.indexOf2("abbababbabbbabaaab","abbabbbabaa"));//System.out.println(i.kmp("abc", ""));System.out.println(i.kmp("a", "a")); // System.out.println(i.indexOf2("mississippi","pi"));System.out.println(i.kmp("abbababbabbbabaaab","abbabbbabaa"));System.out.println(Arrays.toString(i.getNext("issip")));} }

轉(zhuǎn)載于:https://my.oschina.net/findurl/blog/817489

總結(jié)

以上是生活随笔為你收集整理的KMP学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。