<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    so true

    心懷未來,開創未來!
    隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
    數據加載中……

    KMP的改進算法之二

    /*該篇文章所描述的方法是在《KMP改進算法之一》的基礎上產生的,此篇文章主要擴展了KMP算法對于不能處理的如下情況:
    主串:abcabcabd
    子串:abcab
    原先的KMP算法的結果:只能發現一處,即在開始部分匹配到的abcab;
    改進后的KMP算法,可以發現兩處:
    開頭位置的abcabcabd,和中間部分的abcabd。

    */

    #include <iostream>
    using namespace std;

    struct Pair{
     Pair(int i,int v):index(i),value(v),next(NULL){}
     int index;
     int value;
     Pair* next;
    };
    void getNext(char *match, int next[], int len, int *ev=NULL){
     Pair *phead=NULL;
     next[0]=-1;
     for(int j=1,k;j<=len;j++){//多了一步j==len
      k=next[j-1];
      while(k>-1 && match[k]!=match[j-1])k=next[k];
      if(j==len){//將j==len時得到的結果存入到ev之中
       if(ev!=NULL)
        *ev=k+1;
       break;
      }
      next[j]= k+1;
      
      while(k>-1 && match[j]==match[k+1])k=next[k];
      
      if(next[j]!=k+1){
       Pair *p=new Pair(j,k+1);
       p->next=phead;
       phead=p;
      }
     }
     while(phead!=NULL){
      next[phead->index]=phead->value;
      Pair *p=phead;
      phead=phead->next;
      delete p;
     }
    }

    void match_string(char * match, char* text){
     int len_match=strlen(match);
     int *pn=new int[len_match+1];//多了一個尾部結點
     getNext(match,pn,len_match,pn+len_match);//傳遞了尾部結點
     
     int j=0;
     while(*text!=0){
      if(*text==match[j]){
       text++;
       j++;
       if(j==len_match)
       {
        cout<<text-len_match<<endl;
        j=pn[j];//利用了插入到尾部的新結點
       }
      }else{
       j=pn[j];
       if(j==-1){
        text++;
        j=0;
       }
      }
     } 
     
     delete [] pn;
    }

    void main(){
     char *match="abcab";
     char *text="dfdabcabcabdd";
     match_string(match,text);
    }
    /*輸出結果:
    abcabcabdd
    abcabdd
    */

    posted on 2008-10-20 23:20 so true 閱讀(333) 評論(0)  編輯  收藏 所屬分類: C&C++

    主站蜘蛛池模板: 日本精品人妻无码免费大全| 久久福利青草精品资源站免费| 久久午夜夜伦鲁鲁片免费无码影视| 亚洲日韩乱码中文无码蜜桃臀网站 | 最近最新高清免费中文字幕 | 95免费观看体验区视频| 亚洲日韩精品一区二区三区无码| 又粗又长又爽又长黄免费视频| 亚洲国产精品无码久久青草| 日本永久免费a∨在线视频| 亚洲精品97久久中文字幕无码| 一级做a爰片久久毛片免费陪| 最新精品亚洲成a人在线观看| a级黄色毛片免费播放视频| 亚洲AV日韩AV永久无码绿巨人| 久久综合国产乱子伦精品免费 | 亚洲va久久久噜噜噜久久男同| 男女一边摸一边做爽的免费视频| 国产亚洲美女精品久久久2020| 男人进去女人爽免费视频国产| 亚洲精品亚洲人成在线观看麻豆| 中文字幕无码视频手机免费看| 亚洲色成人网站WWW永久四虎| 国产一区二区三区在线观看免费| 又硬又粗又长又爽免费看 | 亚洲欧洲日本在线观看| 国产一精品一aⅴ一免费| 韩国免费A级毛片久久| 久久精品亚洲精品国产色婷| 成年人视频在线观看免费| 激情婷婷成人亚洲综合| 国产亚洲精品观看91在线| 亚洲精品视频免费看| 亚洲AV日韩AV永久无码色欲| 国产日产亚洲系列最新| h视频在线免费看| 国产精品亚洲专区在线播放| 国产V亚洲V天堂A无码| 成人免费男女视频网站慢动作| 国产黄片不卡免费| jizz在线免费观看|