字典树的插入 删除 查找
来源:互联网 发布:下载炫浪网络社区app 编辑:程序博客网 时间:2024/06/05 09:13
Problem C
Accepts: 832
Submissions: 6612
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 131072/131072 K (Java/Others)
Problem Description
度熊手上有一本神奇的字典,你可以在它里面做如下三个操作:
1、insert : 往神奇字典中插入一个单词
2、delete: 在神奇字典中删除所有前缀等于给定字符串的单词
3、search: 查询是否在神奇字典中有一个字符串的前缀等于给定的字符串
Input
这里仅有一组测试数据。第一行输入一个正整数N(1≤N≤100000)N (1\leq N\leq 100000)N(1≤N≤100000),代表度熊对于字典的操作次数,接下来NNN行,每行包含两个字符串,中间中用空格隔开。第一个字符串代表了相关的操作(包括: insert, delete 或者 search)。第二个字符串代表了相关操作后指定的那个字符串,第二个字符串的长度不会超过30。第二个字符串仅由小写字母组成。
Output
对于每一个search 操作,如果在度熊的字典中存在给定的字符串为前缀的单词,则输出Yes 否则输出 No。
Sample Input
5
insert hello
insert hehe
search h
delete he
search hello
Sample Output
Yes
No
#include <cstdio>#include <cstring>#include <iostream>using namespace std;#define maxnode 30struct Node{ char ch; Node *next[maxnode]; int count; Node() { count = 0; memset(next, 0, sizeof(next)); }};void Destroy(Node *root){ if (!root) return; for (int i = 0; i < maxnode; ++i) { Destroy(root->next[i]); } delete root;}void DestroySon(Node *root){ if (!root) return; for (int i = 0; i < maxnode; ++i) { Destroy(root->next[i]); root->next[i] = NULL; }}void Insert(Node *root, char *str){ Node *cur = root; for (int i = 0; str[i]; ++i) { int id = str[i] - 'a'; if (!cur->next[id]) cur->next[id] = new Node; cur = cur->next[id]; ++cur->count; }}Node *Search(Node *root, char *str){ Node *cur = root; for (int i = 0; str[i]; ++i) { int id = str[i] - 'a'; if (cur->next[id]) cur = cur->next[id]; else return NULL; } return cur;}void Delete(Node *root, char *str){ Node *cur = Search(root, str); if (!cur) return; DestroySon(cur); Node *pcur = root; for (int i = 0; str[i]; ++i) { int id = str[i] - 'a'; if (pcur->next[id]) { pcur = pcur->next[id]; pcur->count-= cur->count; } }}int main(){ int N; scanf("%d",&N); Node *root = new Node; while(N--){ char op[32],s[32]; scanf("%s%s", op, s); if(op[0] == 'i') { Insert(root, s); } else if(op[0] == 'd') { Delete(root, s); } else { Node *tmp = Search(root,s); if (tmp && tmp->count > 0) { printf("Yes\n"); } else { printf("No\n"); } } } return 0;}
0 0
- 字典树的插入 删除 查找
- 字典树Trie 之 基础模板(插入,查找,删除)
- 字典树的建立,插入,查找
- T树(字典树的插入和删除以及查找)C++
- 二叉查找树的插入,删除,查找
- 二叉查找树的插入,删除,查找
- 二叉查找树的插入,删除,查找
- 字典树的建立、删除、查找
- Problem C (字典树的查找删除和插入)2016"百度之星" - 资格赛(Astar Round1)
- 二叉搜索树的查找、插入、删除
- B-树的插入、查找、删除
- AVL树的查找,插入,删除
- 二叉搜索树的插入,查找,删除
- 二叉查找树的插入与删除
- 线段树的创建插入查找删除
- B-树的插入、查找、删除
- AVL树的插入、删除、查找操作
- 29、B-树的插入、查找、删除
- 斜率优化反向dp
- CSS3 经典教程系列——CSS3 RGBA 用法详解
- 【剑指offer】链表中倒数第k个结点
- 《Faster R-CNN Features for Instance Search》论文阅读
- android中自定义dialog的使用方法简介
- 字典树的插入 删除 查找
- Opencl编程错误总结
- 可选择也可自定义的输入框实现(原创)
- 关于文字内容溢出用点点点(…)省略号表示
- docker-batman
- KNN算法C++实现
- SQL SERVER 2008同表字段更改
- 算法竞赛入门经典(第2版)习题1-1详解
- java 是如何进行异常处理的