字符串匹配的KMP算法(不建议大家看,这里是我的暂时笔记)

来源:互联网 发布:阿里云t4机房 编辑:程序博客网 时间:2024/06/04 18:36

做个记录:

#include <iostream>#include <algorithm>#include <cstdio>#include <string>using namespace std;const int maxn = 1000;int Next[maxn];string pattern, target;void produceNext() {int i = 0, j = -1, len = pattern.length();Next[0] = -1;while (i < len) {if (pattern[++i] != pattern[++j]) {Next[i] = j;while (j != -1 && pattern[i] != pattern[j]) j = Next[j];} else {Next[i] = Next[j];}}}int KMP() {int i = 0, j = 0, sum = 0, len1 = target.length(), len2 = pattern.length();while (len2 - j <= len1 - i) {if (pattern[j] == target[i]) {i++;j++;if (j == len2) sum++;} else {j = Next[j];if (j == -1) {i++;j++;}}} return sum;}int main() {puts("请输入目标串,以及模式串(不包含空格):");cin >> target >> pattern;produceNext();cout << "一共有:" << KMP() << " 个匹配值。" << endl;cout << "haha " << endl;return 0;}


0 0