HDU 1247 Hat's words(字典树Trie)
来源:互联网 发布:php重庆招聘 编辑:程序博客网 时间:2024/05/18 00:07
解题思路:
判断给出的单词是否恰好由另外两个单词组成,用栈保存每个子字符串的节点,从这个节点出发判断剩下的字符串是否在字典树中即可。
#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#include <map>#include <stack>#include <set>using namespace std;const int MAXN = 50000 + 10;typedef struct Trie_Node{bool isword;struct Trie_Node *next[26];}Trie;void insert(Trie *root, char *word){Trie *p = root;int i = 0;while(word[i] != '\0'){if(p->next[word[i]-'a'] == NULL){Trie *temp = new Trie;temp->isword = false;for(int j=0;j<26;j++)temp->next[j] = NULL;p->next[word[i]-'a'] = temp;}p = p->next[word[i]-'a'];i++;}p->isword = true;}bool Find(Trie *root, char *word){Trie *p = root;int i = 0;stack<int> s;while(!s.empty()) s.pop();while(word[i] != '\0'){if(p->next[word[i]-'a'] == NULL) return 0; p = p->next[word[i]-'a']; if(p->isword && word[i]) s.push(i+1); i++;}while(!s.empty()) { bool ok = true; i = s.top(); s.pop(); p = root; while(word[i]) { if(p->next[word[i]-'a'] == NULL) { ok = false; break; } p = p->next[word[i]-'a']; i++; } if(ok && p->isword) return 1; }return 0;}char s[MAXN][27];int main(){int n = 0;Trie *root = new Trie;root->isword = false;for(int j=0;j<26;j++)root->next[j] = NULL;while(scanf("%s", s[n]) != EOF){insert(root, s[n]);n++;}for(int i=0;i<n;i++){if(Find(root, s[i])) printf("%s\n", s[i]);}return 0;}
0 0
- HDU 1247 Hat’s Words && Trie(字典树)
- HDU 1247 Hat’s Words(字典树Trie)
- HDU 1247 Hat's words(字典树Trie)
- HDU ACM 1247-Hat’s Words-字典树(Trie)
- HDU 1247 Hat’s Words(字典树Trie)
- HDU-1247 Hat’s Words (Trie 字典树)
- hdu 1247 Hat’s Words Trie树
- HDU -- 1247 Hat’s Words (Trie 树)
- Hdu 1247 Hat's Words(Trie树)
- 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(字典树)
- hdu 1247 Hat’s Words(字典树)
- hdu 1247 Hat’s Words字典树
- hdu 1247 Hat’s Words(字典树)
- hdu 1247 Hat’s Words 字典树
- 多线程编程2 - NSOperation
- 文件系统
- 百度离线地图开发
- Murphy's Laws for the 21st Century
- Android] Android开发优化之——使用软引用和弱引用
- HDU 1247 Hat's words(字典树Trie)
- 【Flume】从flume的监控度量数据XXXCounter来看JAVA并发编程中的CAS操作
- HBase到底是个什么东西
- 在oracle中将查询到的数据插入到另一个表中
- 如何使用Java代码获取文件、文件流或字符串的编码方式
- make时出错error: stray ‘\302’ in program
- android 横竖屏转换
- 题目:Median of Two Sorted Arrays
- How to speed up Remote Desktop Connection in Win7