#include <iostream>
#include <cstring>
using namespace std;
const int N=1000000;
int son[N][26],cnt[N],idx=0;
int m,n;
char str[N];
void insert(char* s)//将名单存入trie树
{
int p=0,l=strlen(s);
for(int i=0;i<l;i++)
{
int u=s[i]-'a';
if(!son[p][u])son[p][u]=++idx;
p=son[p][u];
}
}
string query(char* s)//在树中查寻
{
int p=0,l=strlen(s),u;
for(int i=0;i<l;i++)
{
u=s[i]-'a';
if(!son[p][u])return "WRONG";
//结束前任意一步发现没找到
p=son[p][u];
}
@@@@@@@@@@@@@@@
cnt[p]++;
if(cnt[p]==1)return "OK";
else return "REPEAT";
}
int main()
{
cin>>n;
while(n--)
{
cin>>str;
insert(str);
}
cin>>m;
while(m--)
{
cin>>str;
cout<<query(str)<<endl;
}
return 0;
}
当输入名字是名单中名字的子串时(例如名单有ab,输入一个名字a),理应输出WRONG,但我的代码会跳出带有输出WRONG的循环并输出OK。“@@@@@”处是我认为应该加对于正确答案子串但答案错误情况的特判,但不知道究竟如何判断