Trie
来源:互联网 发布:java支持数据库的套件 编辑:程序博客网 时间:2024/05/22 02:43
#include <iostream>#include <string>using namespace std;const int SIZE = 26;// 假设只有小写字母,每一个节点下面开 SIZE 个空间const char BASE = 'a';// 方便减法class TrieNode {public: bool is_terminal;//通过 is_terminal 标记判断这个节点是不是从根节点到此处的一个字符串 TrieNode **childs; TrieNode() { is_terminal = false; childs = new TrieNode*[SIZE]; for (int i = 0; i < SIZE; ++i) { childs[i] = NULL; // originality nullptr here } } ~TrieNode() { for (int i = 0; i < SIZE; ++i) { delete childs[i]; } delete[] childs; }};class StringPatterns {private: TrieNode *root;public: StringPatterns() { root = new TrieNode(); } ~StringPatterns() { delete root; } void add_pattern(const string &pattern) { TrieNode *now = root; for (int i=0;i<pattern.length();i++) { if (now -> childs[pattern[i] - BASE] == NULL) // originality nullptr here { now -> childs[pattern[i] - BASE] = new TrieNode(); } now = now -> childs[pattern[i] - BASE]; } now -> is_terminal = true; } bool match(const string &buffer) const { TrieNode *now = root; for (int i=0;i<buffer.length();i++) { if (now -> childs[buffer[i] - BASE] == NULL) // originality nullptr here { return false; } now = now -> childs[buffer[i] - BASE]; } return now -> is_terminal; }};int main() {StringPatterns trie; int n; cin >> n; for (int i = 0; i < n; ++i) { string pattern; cin >> pattern; trie.add_pattern(pattern); } string str_buffer; cin >> str_buffer; if (trie.match(str_buffer)) { cout << "match success" << endl; } else { cout << "match failed" << endl; } return 0;}
0 0
- Trie
- Trie
- trie
- Trie
- Trie
- Trie
- trie
- Trie
- trie
- Trie
- Trie
- Trie
- trie
- Trie
- trie
- Trie
- Trie
- Trie
- 初识线程
- 如何提交代码到GitHub
- 正则速记理解技巧
- Java并发编程实战
- (8.1.5.9)Android Testing Support Library翻译之 ATSL 中的 JUnit4 规则
- Trie
- IOS 3DTouch
- (8.1.5.10)Android Testing Support Library翻译之 UI Automator
- 湖北民族学院oj 1777(DFS) 之 查找细胞
- (8.1.5.11)Android Testing Support Library翻译之 可访问性检查
- 浅谈web前端的简单优化
- js实现图片预览
- 这是我的第一个博客
- React+Webpack开发环境配置