zoukankan      html  css  js  c++  java
  • 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") -> false
    search("bad") -> true
    search(".ad") -> true
    search("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");
  • 相关阅读:
    获得Coclor的色值(小技巧)
    如何禁止IIS缓存静态文件(png,js,html等)(转)
    风投最关心的问题
    Repeater一行显示数据库中多行表记录
    c# int Int32 Int64 的区别
    动车实名制了
    学习,积累,10000小时定律
    映射路由器到内网ip和端口
    《轮环》故事大纲整理
    .Net读取xlsx文件Excel2007
  • 原文地址:https://www.cnblogs.com/lishiblog/p/5858569.html
Copyright © 2011-2022 走看看