AddandSearchWordDatastructuredesign【LeetCode】
2016-07-11 11:06
495 查看
<pre name="code" class="java">import java.util.LinkedList; import java.util.Queue; import leetcode.ImplementTriePrefixTree2.TrieNode; /* Design a data structure that supports the following two operations: * void addWord(word) * bool search(word) * search(word) can search a literal word or a regular expression string containing only letters a-z or .. 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. * You should be familiar with how a Trie works. If not, please work on this problem: Implement Trie (Prefix Tree) first. */ //Array Implement public class AddandSearchWordDatastructuredesign { class TrieNode { TrieNode[] children; boolean flag; public TrieNode() { this.children = new TrieNode[26]; this.flag = false; } } public TrieNode root = new TrieNode(); // Adds a word into the data structure. public void addWord(String word) { if (word == null || word.length() == 0) return; TrieNode node = root; for (int i = 0; i < word.length(); i++) { if (node.children[word.charAt(i) - 'a'] == null) { node.children[word.charAt(i) - 'a'] = new TrieNode(); } node = node.children[word.charAt(i) - 'a']; } node.flag = true; } // 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) { Queue<TrieNode> queue = new LinkedList<TrieNode>(); TrieNode node = root; queue.add(node); int index = 0; while (!queue.isEmpty()) { if (index == word.length()) return true; TrieNode curr = queue.poll(); if (word.charAt(index) == '.') { for (int i = 0; i < 26; i++) { if (curr.children[i] != null) queue.add(curr.children[i]); } } else { if (curr != null && curr.children[word.charAt(index) - 'a'] == null) break; else queue.add(curr.children[word.charAt(index) - 'a']); } index++; } return false; } public static void main(String[] args){ System.out.println("ti"); Add a=new Add(); a.addWord("tjos"); a.addWord("b"); System.out.println(a.search("b")); System.out.println(a.search("tjod")); } } // Your WordDictionary object will be instantiated and called as such: // WordDictionary wordDictionary = new WordDictionary(); // wordDictionary.addWord("word"); // wordDictionary.search("pattern");
相关文章推荐
- PublicFunction
- Eclipse配置PyDev插件
- PHP针对字符串开头和结尾的判断方法
- 普通用户启动nginx
- 利用简单工具进行客观视频质量分析
- JavaScript改变图片透明度,鼠标放上渐渐显示
- JavaScript图片放大
- mysql 5.7忘记密码处理
- Matlab学习(四)
- HDU1251
- SVM中SMO算法的实现理论+代码
- lucene源码分析---1
- 自定义Cell中按钮的点击事件
- Shell脚本中计算字符串长度的5种方法
- RTP包里面得到H.264数据和AAC数据的方法
- Core Data 学习:轻量级版本迁移(Lightweight Migration)
- Matlab学习(三)
- Hadoop & HBase 故障排除
- 性能测试中用LambdaProbe监控Tomcat
- 浅谈Java设计模式(二十)状态模式(State)