ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

剪花布条(KMP

2021-08-06 23:04:25  阅读:195  来源: 互联网

标签:nxt string int 布条 KMP 剪花 ++ ans pi


#include<bits/stdc++.h>
using namespace std;

const int N=2e5+10;
vector<int> nxt;string s,t;
int n;int ans=0,pre=-1;

vector<int> getnxt(string s) {
  int n = (int)s.length();
  vector<int> pi(n);
  for (int i = 1; i < n; i++) {
    int j = pi[i - 1];
    while (j > 0 && s[i] != s[j]) j = pi[j - 1];
    if (s[i] == s[j]) j++;
    pi[i] = j;
  }
  return pi;
}
void KMP_Count(string s,string p) {//x为模式串 
	int m=s.size(),n=p.size();
    for(int i = 0, j = 0; i < m; ++i){
        while(j && s[i] != p[j]) j = nxt[j-1];
        if(s[i] == p[j]) j++;
        if(j == n){
            // cout<<i-n+1<<endl;
        	if(i-n+1>pre) ans+=1,pre=i;
            j = nxt[j-1];
        }
        // cout<<pre<<endl;
    }
}
int main(){
	while(1){
        cin>>s>>t;
        ans=0;pre=-1;
        if(s[0]=='#') return 0;
	    nxt=getnxt(t);
    	KMP_Count(s,t);
        printf("%d\n",ans);
	    // for(int i=0;i<t.size();i++){
	    // 	cout<<nxt[i]<<" ";
    	// }cout<<endl;
    }
	
}

标签:nxt,string,int,布条,KMP,剪花,++,ans,pi
来源: https://blog.csdn.net/weixin_45714303/article/details/119464940

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有