首页 > 代码库 > LeetCode-Add and Search Word
LeetCode-Add and Search Word
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") -> falsesearch("bad") -> truesearch(".ad") -> truesearch("b..") -> true
Note:
You may assume that all words are consist of lowercase letters a-z
.
Solution:
public class WordDictionary { public class TrieNode{ TrieNode[] childs; boolean hasWord; public TrieNode(){ childs = new TrieNode[26]; hasWord = false; } } TrieNode root; public WordDictionary(){ root = new TrieNode(); } // Adds a word into the data structure. public void addWord(String word) { TrieNode cur = root; for (char c : word.toCharArray()){ if (cur.childs[c-‘a‘]==null){ cur.childs[c-‘a‘] = new TrieNode(); } cur = cur.childs[c-‘a‘]; } cur.hasWord = 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) { return searchRecur(root,word,0); } public boolean searchRecur(TrieNode curNode, String word, int start){ if (curNode==null){ return false; } if (start>=word.length()){ return curNode.hasWord; } char c = word.charAt(start); if (c==‘.‘){ for (TrieNode child : curNode.childs) if (searchRecur(child,word,start+1)){ return true; } return false; } else { return searchRecur(curNode.childs[c-‘a‘],word,start+1); } }}// Your WordDictionary object will be instantiated and called as such:// WordDictionary wordDictionary = new WordDictionary();// wordDictionary.addWord("word");// wordDictionary.search("pattern");
LeetCode-Add and Search Word
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。