判断一下当前的cnt是否是0,是0的话记得输出“WRONG”,这是与仅仅前缀相同不一样的地方
如下面部分代码
插入部分:
void insert()
{
int p = 0;
for(int i = 0; s[i]; ++ i)
{
int u = getnum(s[i]);
if(!son[p][u]) son[p][u] = ++idx;
p = son[p][u];
}
a[p].cnt++;
}
判断查询部分:
void query()
{
int p = 0;
for(int i = 0; s[i]; ++ i)
{
int u = getnum(s[i]);
if(!son[p][u]){
cout << "WRONG" << '\n';
return;
}else{
p = son[p][u];
}
}
if(a[p].cnt == 0){
cout << "WRONG" << '\n';
return ;
}
if(!a[p].flag){
a[p].flag = 1;
cout << "OK" << '\n';
return;
}else if(a[p].flag){
cout << "REPEAT" << '\n';
return;
}
}
这个判断
if(a[p].cnt == 0){
cout << "WRONG" << '\n';
return ;
}
很重要
去掉的话就是判断前缀了
希望能帮到你