问题标题: 酷町堂:7216 Keywords Search

0
1
已解决
丁梓豪
丁梓豪
新手天翼
新手天翼

题目链接: 酷町堂: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
丁梓豪
丁梓豪
新手天翼
新手天翼

emm~谢谢各位 已自行解决,算了还是采纳吧!!

0
万韧山
万韧山
初级天翼
初级天翼

对了楼主,偷偷告诉你,7217,跟此题一模一样,可以用相同的代码提交哦!还能白**经验嘿嘿嘿

我要回答