剪花布条(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;
}
相关推荐
芥末虾1 个月前
【优选算法】KMP模式匹配算法 {算法介绍;算法原理:核心原理,如何求next数组;代码实现}
c语言·c++·算法·kmp·字符串模式匹配
寻找码源1 个月前
【头歌实训:利用kmp算法求子串在主串中不重叠出现的次数】
c语言·数据结构·算法·字符串·kmp
_OLi_1 个月前
力扣 LeetCode 459. 重复的子字符串(Day4:字符串)
算法·leetcode·职场和发展·kmp
AnFany1 个月前
LeetCode【0028】找出字符串中第一个匹配项的下标
python·算法·leetcode·字符串·kmp·字符串匹配
王能2 个月前
Kotlin真·全平台——Kotlin Compose Multiplatform Mobile(kotlin跨平台方案、KMP、KMM)
android·ios·kotlin·web·android jetpack·kmp·kmm
Qres8214 个月前
8.26 T4 日记和编辑器(fhq维护kmp——kmp本身含有的单射与可合并性)
kmp·平衡树·fhq
理论最高的吻4 个月前
28. 找出字符串中第一个匹配项的下标【 力扣(LeetCode) 】
c++·数学·算法·leetcode·职场和发展·字符串·kmp
心.c5 个月前
KMP算法
c++·算法·kmp
ErizJ6 个月前
LeetCode | 28.找出字符串中第一个匹配项的下标 KMP
python·算法·leetcode·kmp