211. Add and Search Word - Data structure design

来源:互联网 发布:淘宝打印发货单软件 编辑:程序博客网 时间:2024/06/05 11:57

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.

similar to 208 , use dfs 

class TrieNode{    boolean isWord;    TrieNode[] children;    public TrieNode(){        children = new TrieNode[26];        isWord = false;    }}public class WordDictionary {    TrieNode root;    public WordDictionary(){        root = new TrieNode();    }    // Adds a word into the data structure.    public void addWord(String word) {        TrieNode p=root;        for(int i=0; i<word.length(); i++){            char c = word.charAt(i);            if(p.children[c -'a']==null){                p.children[c -'a']=new TrieNode();            }            p = p.children[c -'a'];        }        p.isWord = 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) {        TrieNode p=root;        return dfs(word, 0, p);    }    public boolean dfs(String word, int i, TrieNode p){        if(i>=word.length()) {            if(p.isWord) return true;            else return false;        }        char c = word.charAt(i);        if(c=='.'){            for(int k=0; k<26; k++){                if(p.children[k]!=null && dfs(word, i+1, p.children[k])) return true;            }            return false;        }else{            if(p.children[c-'a']==null) return false;            return dfs(word, i+1, p.children[c-'a']);        }    }}// Your WordDictionary object will be instantiated and called as such:// WordDictionary wordDictionary = new WordDictionary();// wordDictionary.addWord("word");// wordDictionary.search("pattern");


0 0
原创粉丝点击