HDU 1247 字典树
来源:互联网 发布:linux 提升用户权限 编辑:程序博客网 时间:2024/05/18 06:38
题目: http://acm.hdu.edu.cn/showproblem.php?pid=1247
字典树入门经典例题. 字典树题目的特点是字符串处理上有重叠现象,例如在一个字串中找字串,本题目是在一个字符串中查找是否可能由两个字符串拼接而成。
核心内容
class node{public: node* next[26]; bool value; node() : value(false) { memset(next,0,sizeof(next)); }};
AC代码: View Source On GitHub
#include <iostream>#include <cstring>using namespace std;class node{public: node* next[26]; bool value; node() : value(false) { memset(next,0,sizeof(next)); }};node _headnode;node* head=&_headnode;void insert(const char* str){ int L=strlen(str); node* p=head; for(int i=0;i<L;i++) { if(p->next[str[i]-'a']==nullptr) { p->next[str[i]-'a']=new node; } p=p->next[str[i]-'a']; } p->value=true;}bool search(const char* str){ int L=strlen(str); node* p=head; for(int i=0;i<L;i++) { if(p->next[str[i]-'a']!=nullptr) { p=p->next[str[i]-'a']; if(p->value) { bool isFound=true; node* q=head; for(int j=i+1;j<L;j++) { if(q->next[str[j]-'a']!=nullptr) { q=q->next[str[j]-'a']; } else { isFound=false; break; } } if(isFound) { if(q->value) { return true; } } } } else { break; } } return false;}#define MAXN 50005#define MAXLEN 1005char input[MAXN][MAXLEN];int main(){ int i=0; while(cin>>input[i]) { insert(input[i++]); } for(int ci=0;ci<i;ci++) { if(search(input[ci])) { cout<<input[ci]<<endl; } } return 0;}
0 0
- hdu 1247 字典树
- hdu 1247 字典树
- hdu 1247(字典树)
- hdu 1247 字典树
- HDU 1247 字典树
- hdu 1247 字典树
- hdu 1247~~字典树
- hdu 1247 字典树
- HDU 1247 字典树
- hdu 1247 字典树
- hdu 1247 (字典树)
- 字典树 之 hdu 1247
- hdu 1247 字典树模版
- HDU 1247 Hat’s Words(字典树)
- hdu 1247 字典树 Hat’s Words
- HDU 1247 Hat’s Words 字典树
- hdu 1247 Hat’s Words 字典树
- HDU 1247 Hat’s Words(字典树)
- 开启分页机制———《x86汇编语言:从实模式到保护模式》读书笔记44
- Jmeter正则表达式提取器
- Deferred Shading
- C/C++何时使用引用和指针
- iOS Frame与Bound
- HDU 1247 字典树
- linux 设置缩进位数
- poj3007Buried memory 极角排序
- MIT操作系统课程CS6.828实验(1) —— 工具链安装
- Linux中内存buffer和cache的区别
- 8.1 幽灵(no.21-no.30)
- 栈—顺序栈的基本操作
- 复杂选择器分类总结图
- 抽象类和抽象函数