<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++

    主站蜘蛛池模板: 老司机亚洲精品影院| 超清首页国产亚洲丝袜| 亚洲视频网站在线观看| 182tv免费视频在线观看| 丝袜熟女国偷自产中文字幕亚洲| 老湿机一区午夜精品免费福利| 国产精品国产免费无码专区不卡 | 亚洲国产成人片在线观看| 色婷婷综合缴情综免费观看 | 麻豆精品不卡国产免费看| 亚洲毛片αv无线播放一区| 抽搐一进一出gif免费视频| 亚洲中文字幕不卡无码| 日韩视频免费在线观看| 91亚洲va在线天线va天堂va国产| 1000部羞羞禁止免费观看视频| 亚洲欧洲日产韩国在线| 最近的免费中文字幕视频| 亚洲精品乱码久久久久久蜜桃图片| 免费精品国产自产拍观看| 亚洲第一视频在线观看免费| 久久被窝电影亚洲爽爽爽| 中文字幕在线免费观看| 伊人久久亚洲综合影院首页| 国产又大又粗又硬又长免费| 国产黄在线播放免费观看| 无码乱人伦一区二区亚洲| 97人妻无码一区二区精品免费| 亚洲精华国产精华精华液好用| 亚洲av无码成人精品区在线播放| a毛片视频免费观看影院| 亚洲日本香蕉视频观看视频| 四虎成人精品一区二区免费网站| 有码人妻在线免费看片| 亚洲免费在线视频| 免费看香港一级毛片| 免费人成激情视频在线观看冫| 亚洲成av人片不卡无码| 亚洲第一黄色网址| 五月婷婷综合免费| jizz在线免费观看|