0
已解决
丁梓豪
新手天翼
新手天翼
题目链接: 酷町堂:7216
#include<bits/stdc++.h>
using namespace std;
void get_next(char ch[],int l,int next[])
{
next[0]=-1;
int i=0,j=-1;
while(i<=l)
{
if(j==-1||ch[i]==ch[j])
next[++i]=++j;
else
j=next[j];
}
}
int num(int ll,int l,int next[],char a[],char b[])
{
int j=0;
for(int i=0;i<ll;i++)
{
while(b[i]!=a[j]&&j>0)
j=next[j];
if(b[i]==a[j])
j++;
if(j==l)
{
return 1;
j=next[j];
}
}
return 0;
}
struct st
{
char a[55];
} st[10004];
int n,m;
char b[1000005];
int l,ll,next[10005];
int main()
{
cin>>n;
while(n--)
{
cin>>m;
for(int i=0;i<m;i++)
cin>>st[i].a;
cin>>b;
int ans=0;
ll=strlen(b);
for(int i=0;i<m;i++)
{
l=strlen(st[i].a);
get_next(st[i].a,l,next);
ans+=num(ll,l,next,st[i].a,b);
}
cout<<ans<<endl;
}
return 0;
}
## ?????
## 哪里错啦???
0
已采纳
万韧山
初级天翼
初级天翼
阿哲.
我是用循环输入字符串find查找写的
for(int j=1;j<=n;j++){
int m=s.find(a[j]);
if(m!=-1) cnt++;
}
如果你不想这样写请忽略
0
0
0