剪花布条(KPM模板题)

思路:套用KMP模板即可。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define endl '\n'
int ne[200005];
int main()
{
	IOS
	string a,b;
	while(cin >> a){
		if(a=="#") break;
		cin >> b;
		int n=a.size(),m=b.size(),cnt=0;
		a=' '+a;//主串 
		b=' '+b;//模式串 
		//套用KMP模板 
		ne[1]=0;
		for(int i=2,j=0;i<=m;i++){//求next数组 
			while(j && b[i]!=b[j+1]) j=ne[j];
			if(b[i]==b[j+1]) j++;
			ne[i]=j;
		}
		for(int i=1,j=0;i<=n;i++){
			while(j && a[i]!=b[j+1]) j=ne[j];
			if(a[i]==b[j+1]) j++;
			if(j==m) cnt++,j=0;//计数的同时,还要初始化 j,再开始向后匹配 
			//若是可以重叠的话 就将 j=0 改成 j=ne[j],再继续向后匹配
			//若是要求模式串在主串中第一次出现的位置 ,就直接输出 i-m+1 
		}
		cout << cnt << endl;
	}
	return 0;
}
相关推荐
Qres82122 天前
8.26 T4 日记和编辑器(fhq维护kmp——kmp本身含有的单射与可合并性)
kmp·平衡树·fhq
理论最高的吻1 个月前
28. 找出字符串中第一个匹配项的下标【 力扣(LeetCode) 】
c++·数学·算法·leetcode·职场和发展·字符串·kmp
心.c2 个月前
KMP算法
c++·算法·kmp
ErizJ3 个月前
LeetCode | 28.找出字符串中第一个匹配项的下标 KMP
python·算法·leetcode·kmp
wk灬丨4 个月前
KMP + Compose 跨平台 Android IOS 实战入门
android·ios·kotlin·kmp
Betty’s Sweet5 个月前
探索数据结构:BF与KMP的灵活应用
c语言·数据结构·kmp·字符串匹配算法·bf
sherecho6 个月前
代码随想录刷题随记8-KMP
数据结构·c++·kmp
徐漠漠6 个月前
LeetCode28.找出字符串中第一个匹配项
java·数据结构·算法·leetcode·kmp
UestcXiye7 个月前
Leetcode3036. 匹配模式数组的子数组数目 II
c++·leetcode·字符串·数据结构与算法·kmp