细节比较多,注意好细节,利用好.substr即可
题目:
AC代码:
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
typedef long long ll;
#define inf 3f3f3f3f
#define N 100+5
string p[N],s,v[N];
ll n,k,cnt,len[N];
ll judge(ll first,ll last)
{
for(ll i=0;i<n;i++)
{
string tmp=s.substr(first,last-first+1);
if(tmp==p[i])
{
v[cnt]=p[i];
len[cnt++]=tmp.size();
return 1;
}
}
return 0;
}
int main()
{
while(cin>>n>>k)
{
cnt=0;
string t[k];
for(ll i=0;i<n;i++) cin>>p[i];
cin>>s;
ll first=0;
for(ll i=0;i<s.size();i++)
{
if(judge(first,i))
{
first=i+1;
}
}
for(ll i=0;i<k;i++)
{
ll ans=0;
cin>>t[i];
string tmp1=t[i];
ll pos=0;
for(ll i=0;i<cnt;i++)
{
//cout<<tmp1.substr(i,len[i])<<endl;
if(v[i]!=tmp1.substr(pos,len[i]))
{
ans++;
pos+=len[i];
}
else pos+=len[i];
}
cout<<ans<<endl;
}
}
}