hdu 1671
2015-08-25 10:40
330 查看
题目大意:
给你一连串的电话号码,确定没有一个电话号码是另一个电话号码的前缀:
字典树的题,没什么好说的,可以用来练手;
这道题需要注意的是回收空间;
给你一连串的电话号码,确定没有一个电话号码是另一个电话号码的前缀:
字典树的题,没什么好说的,可以用来练手;
这道题需要注意的是回收空间;
#include <iostream> #include <cstdio> #include <algorithm> #include <string> using namespace std; struct Node{ int cnt; Node *next[10]; Node(){ cnt = 0; for(int i = 0; i < 10; ++i) next[i] = nullptr; } }; string s[10010]; Node *root; void remove_tree(Node *u){ if(u == nullptr) return ; for(int i = 0; i < 10; ++i) remove_tree(u->next[i]); delete u; } int main() { int T, n; scanf("%d", &T); while(T--){ int ok = 1; root = new Node; scanf("%d", &n); for(int i = 0; i < n; ++i){ cin >> s[i]; Node *p = root; for(unsigned j = 0; j < s[i].size(); ++j){ int t = s[i][j] - '0'; if(p->next[t] == nullptr) p->next[t] = new Node; p = p->next[t]; p->cnt++; } } for(int i = 0; i < n; ++i){ Node *p = root; for(unsigned j = 0; j < s[i].size(); ++j){ int t = s[i][j]-'0'; p = p->next[t]; } if(p->cnt > 1){ ok = 0; break; } } if(ok) printf("YES\n"); else printf("NO\n"); remove_tree(root); //回收空间的时候我多加了一句delete root,然后找了两天的bug; } return 0; }
相关文章推荐
- Servlet的response输出到页面时乱码的解决方法
- Linux中常用操作命令
- PHPExecl操作
- java ubantu
- Java NIO 为什么比IO快
- Linux(Ubuntu)下MySQL的安装与配置
- block 深入理解
- JavaScript中通过getElementsByName访问name集合对象
- CNN+RNN
- Mysql主从服务器原理及配置
- 最长公共子串、最长公共子序列、最长回文子串、模式匹配、最大子序列--字符串问题整理
- 好的博客
- iOS开发系列--地图与定位
- 开发笔记-PHP-CI
- 常规功能和模块自定义系统(cfcmms)—001序言
- 前端图片延迟加载详细讲解
- 如何设置UISwitch的大小
- 微信开发中mysql字符编码问题
- 归并排序Merge Sort LinkedList in Java
- POJ 1580 && HDU 1306 String Matching(水~)