addword(word)
會在資料結構中新增乙個單詞。而search(word)
則支援普通的單詞查詢或是只包含.
和a-z
的簡易正規表示式的查詢。
你可以假設所有的單詞都只包含小寫字母 a-z。
yes樣例
addword("bad")
addword("dad")
addword("mad")
search("pad") // return false
search("bad") // return true
search(".ad") // return true
search("b..") // return true
思路:先定義字典樹節點類,用以實現字典樹;
新增單詞過程和之前的過程一模一樣,在查詢的時候,過程也類似,但要對『.』字元進行特殊處理,這是問題的關鍵;
因為字元為'.'的時候,乙個 . 可以代表乙個任何的字母,在這種情況下,使用遞迴比較好實現。
/*思路:先定義字典樹節點類,用以實現字典樹;
新增單詞過程和之前的過程一模一樣,在查詢的時候,過程也類似,但要對『.』字元進行特殊處理,這是問題的關鍵;
因為字元為'.'的時候,乙個 . 可以代表乙個任何的字母,在這種情況下,使用遞迴比較好實現。
*///節點類的定義,注意建構函式對所有資料成員都進行初始化;
const int max_child=26;
class trienode
};class worddictionary
// adds a word into the data structure.
//新增單詞過程和插入過程一模一樣
void addword(string word)
int len=word.size();
trienode* t=root;
int i=0;
while(ichild[word[i]-'a']==null)
else
i++;
}t->count=1;
}// returns if the word is in the data structure. a word could
// contain the dot character '.' to represent any one letter.
//因為含有『.』,這裡用遞迴比較好實現;
bool search(string word)
bool search(string &word, trienode *p, int i)
//當遇到字元為'.'的時候,乙個 . 可以代表乙個任何的字母;
//這裡用遞迴的方式判斷輸入字串是否存在;
if (word[i] == '.')
}return false;
} else
}private:
trienode *root;
};// your worddictionary object will be instantiated and called as such:
// worddictionary worddictionary;
// worddictionary.addword("word");
// worddictionary.search("pattern");
最高頻的K個單詞 LintCode
描述 給乙個單詞列表,求出這個列表中出現頻次最高的k個單詞。你需要按照單詞的詞頻排序後輸出,越高頻的詞排在越前面。如果兩個單詞出現的次數相同,則詞典序小的排在前面。樣例 給出單詞列表 yes lint code yes code baby you baby chrome safari lint co...
專門查英語單詞的軟體 查英語單詞的工具
查英語單詞的工具 一 紙質字典 查閱性字典主要作用是為了檢索單詞,詞彙按照字母表的順序依次排列,會列出單詞的音標 分類釋義 例句 用法搭配等。主要分類有英漢詞典,英漢双解詞典以及英英詞典。英漢大詞典 主要是給語言的初學者或者是母語非英語的學習者。英漢双解詞典 是目前英語學習詞典的主流。英漢双解詞典都...
LintCode 471 最高頻的K個單詞
題目 給乙個單詞列表,求出這個列表中出現頻次最高的k個單詞。思路 本題並不難,主要需要重新實現乙個hashmap根據key值和value值排序的comparator介面即可。但hashmap並沒有比較器介面,所以需要把hashmap的entryset匯入乙個list中,呼叫collections.s...