1. 程式人生 > 實用技巧 >[演算法總結] KMP演算法

[演算法總結] KMP演算法

一、什麼是KMP演算法?KMP演算法是解決什麼問題的?
假設現在有一個字串s = "BBC ABCDAB ABCDABD CDABDE",另一個字串s1 = "ABCDABD",現在需要你判斷,s1是否是s中的一個子串,如何判斷?
我們大可以用暴力法,設定兩個指標i和j分別指向s和s1,迴圈去比較s[i]==s1[j]?,如果相等則i和j均後移比較下一個字元,如果不等則i回到最開始相等的位置後一個位置,j重新回到s1的第一個位置處。
迴圈進行下去,直到i==strlen(s)或j==strlen(s1)。
如下,我們實現這個過程:

#include "stdio.h"
#include "string.h
" typedef int bool; #define true 1 #define false 0 bool stringMatch(char *str, char *s) { if (str == NULL || s == NULL) { return false; } int i = 0, j = 0; while ((i < strlen(str)) && (j < strlen(s))) { if (s[j] != str[i]) { i = i - j + 1
; j = 0; } if (s[j] == str[i]) { i++; j++; } } if (j == strlen(s)) { return true; } return false; } int main() { char *s = "BBC ABCDAB ABCDABD CDABDE", *s1 = "ABCDABD"; if (stringMatch(s, s1)) { printf(
"true\n"); } else { printf("false\n"); } return 0; }