标签:method ase exp any regular you repr ext let
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.
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 { TrieNode[] child = new TrieNode[26]; boolean isWord = false; } TrieNode root = new TrieNode(); public void addWord(String word) { TrieNode p = root; for (char c : word.toCharArray()) { if (p.child[c - ‘a‘] == null) p.child[c - ‘a‘] = new TrieNode(); p = p.child[c - ‘a‘]; } p.isWord = true; } public boolean search(String word) { return doSearch(root, word.toCharArray(), 0); } private boolean doSearch(TrieNode cur, char[] word, int pos) { if (cur == null) return false; if (pos == word.length) return cur.isWord; if (word[pos] == ‘.‘) { for (TrieNode next : cur.child) if (doSearch(next, word, pos + 1)) return true; return false; } return doSearch(cur.child[word[pos] - ‘a‘], word, pos + 1); } }
Trie Trie Trie
private boolean helper(String s, int index, TrieNode p) { if (index >= s.length()) return p.isWord; char c = s.charAt(index); if (c == ‘.‘) { for (int i = 0; i < p.child.length; i++) if (p.child[i] != null && helper(s, index + 1, p.child[i])) return true; return false; } else return (p.child[c - ‘a‘] != null && helper(s, index + 1, p.child[c - ‘a‘])); }
search的method也可以这样
211. Add and Search Word - Data structure design
标签:method ase exp any regular you repr ext let
原文地址:https://www.cnblogs.com/wentiliangkaihua/p/12898918.html