程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 字符串匹配算法之KMP算法

字符串匹配算法之KMP算法

編輯:C++入門知識

這個算法是字符串匹配算法中的佼佼者,僅利用O(lengthText + lengthPattern)的時間就完成了匹配任務。他快速的原因是無須回溯。這個算法最高深的也是最難懂的地方在於,兩個串進行匹配,成功與否竟然只和模板串有關系,和目標串是沒有關系的。當模板串在j位置匹配失敗後,不用重新到0位置,下一次的位置應該再next[j]的位置。 下面是生成next數組的函數: [cpp]   void GetNext(string Pattern, vector<int> &next)   {       int j = 0;       int k = -1;       int lenP = Pattern.length();       next.assign(8, -1);          while (j < lenP)       {           if ((k == -1) || (Pattern[j] == Pattern[k]))           {               j++; k++;               next[j] = k;           }            else           {               k = next[k];           }       }   }   下面是KMP算法: [cpp]   int KMP(string Text, string Pattern, vector<int> &next, int TdefPos = 0)   {       int posP = 0, posT = TdefPos;       int lenP = Pattern.length();       int lenT = Text.length();          while ((posP < lenP) && (posT < lenT))       {           if ((posP == -1) || Pattern[posP] == Text[posT])           {               posP++; posT++;           }            else           {               posP = next[posP];           }       }          if (posP < lenP)       {           return -1;       }        else       {           return (lenT - lenP);       }   }  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved