1 条题解
-
0
思路
千字符范围可朴素匹配,标程用KMP优化;剪出片段不能重叠,匹配后清零状态;终止符是单个#,以#开头的普通布条仍要处理。
参考程序(C++11)
#include <bits/stdc++.h> using namespace std; int main(){ios::sync_with_stdio(false);cin.tie(nullptr);string s,p;while(cin>>s&&s!="#"){cin>>p;vector<int>a(p.size());for(int i=1;i<(int)p.size();i++){int j=a[i-1];while(j&&p[i]!=p[j])j=a[j-1];if(p[i]==p[j])j++;a[i]=j;}int j=0,ans=0;for(char x:s){while(j&&p[j]!=x)j=a[j-1];if(p[j]==x)j++;if(j==(int)p.size()){ans++;j=0;}}cout<<ans<<'\n';}}
- 1