#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
char str1[1000001];
char str2[1000001];
void getNextArray(char *str, int *next) {
int len = strlen(str);
int k = -1;
int j = 0;
next[0] = -1;
while (j < len - 1) {
if (k == -1 || str[j] == str[k]) {
++k;
++j;
next[j] = k;
//next[j] = (str[j] != str[k] ? k : next[k]); // optimize
} else {
k = next[k];
}
}
}
int searchLongestSubString(char str1[], char str2[]) {
int len1 = strlen(str1);
int len2 = strlen(str2);
int next[len2];
int flag = 0;
getNextArray(str2, next);
int i = 0; // str1 index.
int j = 0; // str2 index.
while (j <= len2 - 1) {
if (str1[i] == str2[j]) {
i++;
j++;
if (j == len2) {
return flag;
}
} else {
i += j - next[j];
flag = i;
j = 0;
if (i + len2 > len1) {
break;
}
}
}
return -1;
}
int main() {
scanf("%s%s", str1, str2);
int result = searchLongestSubString(str1, str2);
cout << result << endl;
return 0;
}
KMP
最新推荐文章于 2025-09-29 23:39:36 发布
本文深入探讨了字符串匹配算法,特别是KMP算法的实现原理。通过详细的代码解析,讲解了如何构造next数组,以及如何利用next数组进行高效字符串匹配。文章包含完整的C++代码示例,适合对字符串匹配算法感兴趣的读者。
1922

被折叠的 条评论
为什么被折叠?



