kmp演算法的核心,是部分匹配表(partial match table)陣列。pmt陣列儲存字串字首集合和字尾集合的交集中最長字串的長度。以ababaca為例,對ababa來說,其字串字首集合為,字尾集合為。故兩集合交集對應的最長字串為aba,其長度為3,其對應的pmt陣列中的值即為3。通過利用pmt陣列儲存重複模式,在字串模式匹配的過程中可減少重複匹配。
具體**如下:
int kmp(char* s, char* t)
else j = pmt[j];
}if(j == len2) return i-j;
else
return -1;
}void getpmt(char* t, int* next)
else j = pmt[j];
}}
參考:如何更好的理解和掌握 kmp 演算法? - 海納的回答 - 知乎 字串模式匹配KMP演算法
next的值去改變每次匹配的位置 注意 字串的儲存最好用字元陣列,然後用字元輸入的形式,保證正確!利用求模式串的next值來分析遍歷,可以在不改變主串i的值的基礎上,只改變next j 的下標來遍歷 next j include include using namespace std void ge...
字串模式匹配KMP演算法
字串模式匹配指的是,找出特定的模式串在乙個較長的字串中出現的位置。很直觀的可以寫出下面的 來找出模式串在乙個長字串中出現的位置。1 2 樸素的模式匹配演算法 3 功能 字串的模式匹配 4 引數 5 s 目標串 6 p 模式串 7 pos 開發匹配的位置 8 返回值 9 匹配成功,返回模式串在目標串的...
字串模式匹配KMP演算法
字串模式匹配指的是,找出特定的模式串在乙個較長的字串中出現的位置。很直觀的可以寫出下面的 來找出模式串在乙個長字串中出現的位置。1 2 樸素的模式匹配演算法 3 功能 字串的模式匹配 4 引數 5 s 目標串 6 p 模式串 7 pos 開發匹配的位置 8 返回值 9 匹配成功,返回模式串在目標串的...