自己寫了乙個簡潔版本, 加注釋。
第乙個函式是得到kmp的next陣列。
1、設定next的第乙個值為-1。
2、遍歷剩下的t串
3、t串前後比較,相等就在next中對應位置加1
4、不等,就回溯 t串中等價位置
void getnext(string &t,int *next)
else
j = next[j];
}}
第二個 即為kmp函式
1、首先生成next陣列
2、對s串、t串進行遍歷
3、相等時 繼續往前走
4、不等時且此時對應的 next值為-1 時,代表此時t串又回到了第乙個位置,並且s串、t串該處不匹配
5、其他情況時將next值賦給t串的移動變數j
6、釋放next
7、如果j已經走到了t串尾,則表示已經s串、t串已經各處匹配,返回i-j
不然,匹配失敗,返回-1
int kmp_method(string &s, string &t)//s為源串,t為目標串
else if (next[j] == -1)
i++;
else
j = next[j];
} if (next)
return (j == t.size()) ? i -j : -1;
}
KMP演算法及其優化
今天來記錄一下,關於字元匹配的kmp演算法。給定字串text和pattern,需要判斷字串pattern是否為test的子串。pattern一般稱為模式串,text為文字串。若匹配成功,則讓函式返回,匹配開始處的下標,否則,返回 1。假設有乙個字串s,它以i號位作為結尾的子串就是s 1 i 對該字串...
經典演算法之KMP演算法及其優化
kmp演算法的具體分析見 author s email wardseptember gmail.com date 2017.12.18 kmp演算法 include include using namespace std define maxsize 50 void getnext char sub...
Kmp字元匹配演算法優化C 實現
c 實現kmp字元匹配演算法的優化版 標頭檔案 kmpalgorithm.h ifndef kmpalgorithm h define kmpalgorithm h include include class kmpalgorithm int index kmp int pos 字元匹配函式 end...