概述
题目描述
这是一道模板题。
给定一个字符串 A 和一个字符串 B,求 B 在 A 中的出现次数。A 和 B 中的字符均为英语大写字母或小写字母。
A 中不同位置出现的 B 可重叠。
输入格式
输入共两行,分别是字符串 A 和字符串 B。
输出格式
输出一个整数,表示 B 在 A 中的出现次数。
样例
input | output |
zyzyzyz zyz | 3 |
数据范围与提示
1 ≤A,B 的长度 ≤1e6,A、B 仅包含大小写字母。
#include<stdio.h>
#include<string.h>
char a[1000010],b[1000010];
int prefix[1000010];
void get_prefix();
void kmp();
int main()
{
scanf("%s",a);
scanf("%s",b);
kmp();
return 0;
}
void get_prefix(){
prefix[0] = -1;
prefix[1] = 0;
int i = 1,len = 0,m = strlen(b);
while(i < m )
{
if(b[i] == b[len]){
len++;
i++;
prefix[i] = len;
}
else{
if(len > 0)
{
len = prefix[len];
}
else{
prefix[++i] = len;
}
}
}
}
void kmp(){
get_prefix();
int n = strlen(a),m = strlen(b);
int i=0,j=0,sum=0;
while(i < n)
{
if(j == m-1 && a[i] == b[j]){
sum++;
j = prefix[j];
}
if(a[i] == b[j]){
i++; j++;
}
else{
j = prefix[j];
if(j == -1){
i++; j++;
}
}
}
printf("%d",sum);
}
思路启发:
KMP字符串匹配算法2_哔哩哔哩_bilibili
KMP算法之求next数组代码讲解_哔哩哔哩_bilibili
最后
以上就是开心糖豆为你收集整理的子串查找(KMP算法)的全部内容,希望文章能够帮你解决子串查找(KMP算法)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复