211. Add and Search Word - Data structure design
2016-03-22 10:45
309 查看
Design a data structure that supports the following two operations:
search(word) can search a literal word or a regular expression string containing only letters
A
For example:
Note:
You may assume that all words are consist of lowercase letters
就是棵树……不是二叉的 分叉有点多……完了
void addWord(word) bool search(word)
search(word) can search a literal word or a regular expression string containing only letters
a-zor
..
A
.means it can represent any one letter.
For example:
addWord("bad") addWord("dad") addWord("mad") search("pad") -> false search("bad") -> true search(".ad") -> true search("b..") -> true
Note:
You may assume that all words are consist of lowercase letters
a-z.
就是棵树……不是二叉的 分叉有点多……完了
public class WordDictionary { class TrieNode { boolean endHere; // empty string, 1 node; string of length n, (n + 1) nodes. TrieNode[] branch; TrieNode () { endHere = false; branch = new TrieNode[26]; } } TrieNode root = new TrieNode(); // Adds a word into the data structure. public void addWord(String word) { addWord(word, 0, root); } private void addWord(String word, int p, TrieNode node) { if (p == word.length()) { node.endHere = true; return; } int index = word.charAt(p) - 'a'; TrieNode succ = node.branch[index]; if (succ == null) { succ = new TrieNode(); node.branch[index] = succ; } 4000 addWord(word, p + 1, succ); } // Returns if the word is in the data structure. A word could // contain the dot character '.' to represent any one letter. public boolean search(String word) { return search(word, 0, root); } private boolean search(String word, int p, TrieNode node) { if (p == word.length()) { return node.endHere; } char c = word.charAt(p); if (c != '.') { if (node.branch[c - 'a'] == null) { return false; } return search(word, p + 1, node.branch[c - 'a']); } else { for (int i = 0; i < 26; ++i) { if (node.branch[i] != null && search(word, p + 1, node.branch[i])) { return true; } } } return false; } }
相关文章推荐
- oracle sqlplus 连接时,connection to 显示的是问号
- Storm集群组件和编程模型
- JS判断数据类型
- Cross-Origin Resource Sharing协议介绍
- android 自定义View实现长按事件
- python 闭包
- 98. Validate Binary Search Tree
- cocoapods 命令
- Android Studio 进行单元测试完整教程
- 基于接口和基于事件的回调-Android
- seueuQgnisukcatStnemelpmI.225
- Hibernate映射解析——七种映射关系
- Oracle EBS LOV速度优化
- 第四周项目12-两个数求最大公约数与四个数求最大公约数
- ACM算法分类
- 安卓文档
- 【转】存储过程和触发器的取舍问题(优缺点分析)
- wget 官方jdk
- 类的更新----MVC设计模式
- AWK精讲