首先用kmp找出所有模式串的位置放在id中(vector类型),然后做dp,dp方程为:
对于第i个位置,如果第j( j < i 中最大的 j )个位置满足
id[i]-id[j]>=son.size()(即模式串在主串中的这两个位置没有重叠部分),
则d[i]=d[i-1]+d[j];
如果这个j不存在则d[i]=d[i-1]+1。
#include<bits/stdc++.h>
using namespace std;
const int mod=1000000007;
const int maxn=100000;
vector<int>id;
int nxt[maxn+