小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

KMP算法

 ShangShujie 2007-05-16
KMP算法
2007-05-07 19:12

原創(chuàng)作品,作者:飛陽。轉(zhuǎn)載請注明出處,謝謝。
http://hi.baidu.com/burtcn

很著名的文本匹配的算法,據(jù)說華為公司的筆試題目曾經(jīng)出過這道
今天終于搞明白了。。別小看這很短的代碼。。

文本匹配的算法還有個BM算法,據(jù)說是比KMP算法還是高效
我感覺下面的代碼還算是比較簡單易懂的KMP算法。。

#include <stdio.h>
#include <string.h>
void setNext(char pattern[],int next[],int size){          
            int j;
            next[0]=-1;
            for(int i=1;i<size;i++){                    
                      for(j=next[i-1];j>=0&&pattern[i]!=pattern[j+1];j=next[j]);                    
                      next[i]=(j<0&&pattern[i]!=pattern[j+1])?-1:j+1;
            }
}
int match(char source[],char pattern[]){          
            int psize=strlen(pattern);          
            int *next=new int[psize];
            setNext(pattern,next,psize);          
            int i,j;
            int size=strlen(source);
            for(i=0,j=0;i<size;){                    
                      if(source[i]!=pattern[j]){                              
                                if(j>0){                                        
                                          j=next[j-1]+1;
                                }else
                                          i++;
                      }else
                                i++,j++;
                      if(j>=psize) break;
            }          
            return j>=psize?i-psize:-1;
}
int main(){          
            char *source="ababababeababcabdaf";
            char *pattern="ababc";
            printf("%d\n",match(source,pattern));          
            return 0;
}

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多