这个题的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;
}
}