*LeetCode-Add and Search Word - Data structure design

来源:互联网 发布:第二基地知乎 编辑:程序博客网 时间:2024/06/05 02:38

这个题的trie tree解法以后要记得看

首先我想的每次add一个词 就add bad/ .ad / ..d / b.d太慢了

应该是用map存 用长度做key 一个list存这个长度的所有string

然后每次首先判断长度 然后判断是否是完整的词 List有contains函数!!!

然后假如不是词 而是有.的 就一位一位判断

public class WordDictionary {    HashMap<Integer,List<String>> dict = new HashMap<Integer, List<String>>();    // Adds a word into the data structure.    public void addWord(String word) {        if ( dict.containsKey( word.length() )){            List<String> list = dict.get( word.length() );            if ( !list.contains( word ) )                list.add ( word );        }        else{            List<String> temp = new ArrayList<String>();            temp.add ( word );            dict.put ( word.length(), temp );        }    }    // 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 ( !dict.containsKey( word.length() ))            return false;        List<String> list = dict.get ( word.length() );        if ( isWord ( word ) ){            return list.contains( word );        }        else {            for ( String str: list ){                if ( same ( word, str ) )                    return true;            }        }        return false;    }    public boolean isWord ( String word ){        for ( int i = 0; i < word.length(); i++ ){            if ( !Character.isLetter( word.charAt(i) ) )                return false;        }        return true;    }    public boolean same ( String word, String str){        for ( int i = 0; i < word.length(); i ++ ) {            if ( word.charAt(i) != str.charAt(i) && word.charAt(i) != '.')                return false;        }        return true;    }}


0 0
原创粉丝点击