子串查找
题目

输入

输出

输入样例
zyzyzyz
zyz
输出样例
3
解题思路
KMPKMPKMP的模板题
程序如下
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n, m, p[10000001];
char s[10000001], t[10000001];
int main()
{
scanf("%s", s + 1);
n = strlen(s + 1);
scanf("%s", t + 1);
m = strlen(t + 1);
p[1] = 0;
for(int i = 1, j = 0; i < m; ++i)
{
while(j > 0 && t[j + 1] != t[i + 1]) j = p[j];
if(t[j + 1] == t[i + 1]) ++j;
p[i + 1] = j;
}
int ans = 0;
int j = 0;
for(int i = 1; i <= n; ++i)
{
while(j && t[j + 1] != s[i]) j = p[j];
if(s[i] == t[j + 1]) ++j;
if(j == m) ans++;
}
printf("%d", ans);
return 0;
}
子串查找算法详解:KMP匹配实现
本文详细解析了KMP算法在字符串子串查找中的应用,通过实例演示如何利用前缀函数优化查找过程。重点介绍了KMP算法的原理、步骤,并提供了C++代码实现。
349

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



