Lintcode 單詞的新增與查詢

2022-06-22 17:21:15 字數 1809 閱讀 9151

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...