zoukankan      html  css  js  c++  java
  • (*medium)LeetCode 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.

    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.

    click to show hint.

    You should be familiar with how a Trie works. If not, please work on this problem: Implement Trie (Prefix Tree) first.
    方法:1:暴力解法,超时
    代码如下:
    public class WordDictionary {
    
        private List<String>list=new ArrayList<>();
        // Adds a word into the data structure.
        public void addWord(String word) {
            list.add(word);
        }
    
        // 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) {
            if(list.contains(word)){
                return true;
            }else{
                int size=list.size();
                int i=0,j=0;
                for(;i<size;i++){
                   String s= list.get(i);
                   int len=s.length();
                   if(len!=word.length())
                       continue;
                       j=0;
                   for(;j<len;j++){
                       if(word.charAt(j)=='.')
                           continue;
                       else{
                           if(s.charAt(j)!=word.charAt(j)){
                               break;
                           }
                       }       
                   }
                  if(j==len) return true;
                }
                return false;
            }
        }
    }
    
    // Your WordDictionary object will be instantiated and called as such:
    // WordDictionary wordDictionary = new WordDictionary();
    // wordDictionary.addWord("word");
    // wordDictionary.search("pattern");
    

    运行结果:

    方法2:按照提示,使用单词查字树

    代码如下:

    public class WordDictionary {
    
        public class TrieNode{
            public TrieNode[] children=new TrieNode[26];
            public String item="";
        }
        private TrieNode root=new TrieNode();
        // Adds a word into the data structure.
        public void addWord(String word) {
           TrieNode node=root;
           for(char c:word.toCharArray()){
               if(node.children[c-'a']==null){
                   node.children[c-'a']=new TrieNode();
               }
               node=node.children[c-'a'];
           }
           node.item=word;
        }
    
        // 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 match(word.toCharArray(),0,root);
        }
        private boolean match(char[] chs,int k,TrieNode node){
            if(k==chs.length) return !node.item.equals("");
            if(chs[k]!='.'){
                return node.children[chs[k]-'a']!=null && match(chs,k+1,node.children[chs[k]-'a']);
            }else{
                    for(int i=0;i<node.children.length;i++){
                        if(node.children[i]!=null){
                            if(match(chs,k+1,node.children[i])){
                                return true;
                            }
                        }
                    }
                }
                return false;
            }
        }
    
    
    // Your WordDictionary object will be instantiated and called as such:
    // WordDictionary wordDictionary = new WordDictionary();
    // wordDictionary.addWord("word");
    // wordDictionary.search("patter");
     运行结果:
  • 相关阅读:
    CodeForces 785D Anton and School
    CodeForces 785C Anton and Fairy Tale
    CodeForces 785B Anton and Classes
    CodeForces 785A Anton and Polyhedrons
    爱奇艺全国高校算法大赛初赛C
    爱奇艺全国高校算法大赛初赛B
    爱奇艺全国高校算法大赛初赛A
    EOJ 3265 七巧板
    EOJ 3256 拼音魔法
    EOJ 3262 黑心啤酒厂
  • 原文地址:https://www.cnblogs.com/mlz-2019/p/4734392.html
Copyright © 2011-2022 走看看