zoukankan      html  css  js  c++  java
  • 211. 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.

    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也可以这样

  • 相关阅读:
    poj-1273(最大流)
    SPOJ
    Gym
    (转)博弈 SG函数
    《STL详解》解题报告
    《STL详解》读书笔记
    LightOJ
    hdu1286 找新朋友 欧拉函数模板
    (转)数位dp
    (转)约瑟夫环问题
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/12898918.html
Copyright © 2011-2022 走看看