p=p->next[id];
p->vis++;
}
else{
p=p->next[id];
p->vis++;
}
}
}
int Search(char* str)
{
Trie *p=root;
int len=strlen(str);
for (int i=0;i<len;i++)
{
int id=str[i]-‘a’;
if (p->next[id] == NULL) return 0;
else p=p->next[id];
}
return p->vis;
}
/*
void Del(char* str)
{
bool f=Search(str);
if (f == false) return;
else
{
Trie *p=root;
int len=strlen(str);
for (int i=0;i<len;i++)
{
int id=str[i]-‘a’;
p=p->next[id];
p->vis=false;
}
}
}*/
void Del(char* str)
{
int cnt=Search(str);
if (cnt == 0) return;
else
{
Trie *p=root;
int len=strlen(str);
for (int i=0;i<len;i++)
{
int id=str[i]-‘a’;
p=p->next[id];
p->vis-=cnt;
}
for (int i=0;i<26;i++) p->next[i]=NULL;
}
}
int main()
{
int t;
scanf(“%d”,&t);
// getchar();
root=CreateNode();
while (t–)
{
char str1[7],str2[45];
scanf(“%s%s”,str1,str2);
switch(str1[0])
{
case ‘i’:
Insert(str2);
break;
case ‘s’:
printf(“%s\n”,Search(str2)>0?“Yes”:“No”);
break;
case ‘d’:
Del(str2);
}
}
return 0;
}
1004、
分析:先标准化,都让字符串从小到大排序,这样考虑的情况就减少了很多,开始我的想法用map容器处理,TLE。。。无语,不知道为什么最近用map总是超时闹bug。。。郁闷;之后换个方向思考,字典树(具体可以见我前面的博客),裸的字典树,只需处理插入查找便可
#include
#include