2022-03-13

KMP算法尊流,左神P12。


KMP的例子流程講解.PNG
public static int getindexof(String s,String m){
        if(s==null || m==null || m.length()<1 || s.length()<m.length()){
            return -1;
        }
        char[] s1 = s.toCharArray();
        char[] s2 =m.toCharArray();
        int i1=0;
        int i2=0;
        int[] next = getNextArray(s2);
        while(i1<s1.length && i2<s2.length){
            if(s1[i1]==s2[i2]){  //相等同時移動
                i1++;
                i2++;
            }else if(next[i2]==-1){  // next數組中規(guī)定0位置就是-1
                i1++;   //str2沒法再找到位置移動了膘魄,str1必須后移,后移之后和0位置的比較
            }else{
                i2 = next[i2];   //不想等str2可以找到next數組的位置竭讳,str2移動到next的位置繼續(xù)和str1[i]比較创葡,str1不動
            }
        }
        //i1 或者i2越界
        //i2越界表示找到匹配位置了,否則就是沒找到啊绢慢,返回-1
        return i2==s2.length ? i1-i2:-1;
    }

    /*
       abbstabbecabbstabb    ?     _
                            i-1    i
                             8    求解
       灿渴?處的next數組值為8表示最長前綴和后綴是8(abbstabb)
       求解i處的next數組和i自己的值沒有關系,只看i-1位置的數
       由next數組的8可以得到接下來要比較的元素是e和胰舆? 如果兩者相等那么i的next數組就是8+1=9
       否則逻杖,繼續(xù)跳轉,就是去8的下標處繼續(xù)比較就是e(它的next數組是3)(abb)
       繼續(xù)這個流程思瘟,找到next數組的待比較元素就是s荸百,和?比較滨攻,相等3+1結束够话,不相等繼續(xù)
       調到s找到next數組對應的待比較元素(s的下標是0),那么a=光绕?嘛女嘲? 如果等于就是1了,
       不等于a的next數組是-1诞帐,找不到了欣尼,直接i的next數組的值就是0
     */
    public static int[] getNextArray(char[] ms){
        if(ms.length==1){
            return new int[]{-1};
        }
        int[] next = new int[ms.length];
        next[0]=-1;
        next[1] = 0;
        int i=2;
        int cn =0;  //當前字符和?字符(i-1字符)比較
        while(i<next.length){
            if(ms[i-1]==ms[cn]){   //當cn==0的時候呢這里就已近比較了next[0]和?的數據愕鼓,所以是>0,而不是>=0
                next[i++] = ++cn;  //當前位置和i-1的字符相等了钙态,那么cn+1填入即可。cn隨著i值需要自增菇晃,才能保證下一個是i-1的位置
            }else if(cn>0){    //不相等呢册倒,繼續(xù)通過next數組找下一個比較的位置。
                cn = next[cn];   //這里cn>0 cn==0的話 cn=next[cn]就是是-1磺送,到上面就會報錯
            }else{
                next[i++] = 0;  //既不相等cn又到了0的位置那么就是沒得比了驻子,
            }
        }
        return next;
    }
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市估灿,隨后出現的幾起案子崇呵,更是在濱河造成了極大的恐慌,老刑警劉巖馅袁,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件演熟,死亡現場離奇詭異,居然都是意外死亡司顿,警方通過查閱死者的電腦和手機芒粹,發(fā)現死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來大溜,“玉大人化漆,你說我怎么就攤上這事∏辗埽” “怎么了座云?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長付材。 經常有香客問我朦拖,道長,這世上最難降的妖魔是什么厌衔? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任璧帝,我火速辦了婚禮,結果婚禮上富寿,老公的妹妹穿的比我還像新娘睬隶。我一直安慰自己,他們只是感情好页徐,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布苏潜。 她就那樣靜靜地躺著,像睡著了一般变勇。 火紅的嫁衣襯著肌膚如雪恤左。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音飞袋,去河邊找鬼戳气。 笑死,一個胖子當著我的面吹牛授嘀,可吹牛的內容都是我干的物咳。 我是一名探鬼主播锣险,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼蹄皱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了芯肤?” 一聲冷哼從身側響起巷折,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎崖咨,沒想到半個月后锻拘,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡击蹲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年署拟,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片歌豺。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡推穷,死狀恐怖,靈堂內的尸體忽然破棺而出类咧,到底是詐尸還是另有隱情馒铃,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布痕惋,位于F島的核電站区宇,受9級特大地震影響,放射性物質發(fā)生泄漏值戳。R本人自食惡果不足惜议谷,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望堕虹。 院中可真熱鬧柿隙,春花似錦、人聲如沸鲫凶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽螟炫。三九已至波附,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背掸屡。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工封寞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仅财。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓狈究,卻偏偏與公主長得像,于是被迫代替她去往敵國和親盏求。 傳聞我的和親對象是個殘疾皇子抖锥,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內容

  • 又到了周末就總結一下這一周吧荆烈,總體上感覺過的不怎么樣拯勉。 過的不是很順心,最主要的原因呢憔购,就是算法做的很差宫峦,...
    寶子向前沖閱讀 128評論 0 1
  • 針對某個基因敲除的斑馬魚,在12-25天會逐漸死亡玫鸟,因此我們選擇了8dpf 和16dpf 的由于進行轉錄組測序导绷,根...
    zebra_mito閱讀 8,710評論 1 15
  • 信息化時代基于云會計的固定資產管理探討 摘要: 在大數據時代,國內企業(yè)根據時代特點調整了業(yè)務方法鞋邑,開始嘗試使用云會...
    A岳綺羅閱讀 435評論 0 0
  • 《高維度思考法》1.3 “無知枚碗,未知”的思考框架 按照前文對于“知”的定義(2022-03-12整...
    Thinker閱讀 322評論 0 2
  • 本周主要是1逾一、mysql增刪改查事務2、redis基本數據類型的操作肮雨,事務遵堵,鎖3、算法上寫了一部分的藍橋杯算法怨规,幾...
    smartconf閱讀 153評論 0 0