演算法題 兄弟單詞

2021-08-02 03:49:57 字數 1177 閱讀 2466

在字典樹的字首中再儲存乙個vector結構的容器:

struct word

; 首先根據字典中的單詞來建立字典樹,建立的時候,需要稍微特殊處理一下,就是比如pots、stop和tops互為兄弟單詞,那麼在字典中按照首字母順序的話,應該先遇到pots單詞,那麼我首先對其進行排序,結果是opts,那麼字典樹中就分別建立4個節點,分別為o->p->t->s,當然這個是不同層次的,在節點s處的vector容器brother中新增單詞pots,遇到stop的時候,同樣的方法,排序是opts,此時發現這4個節點已經建立了,那麼只需要在第四個節點s處的vector容器brother中新增單詞stop,tops單詞的處理方法是同樣的。

建立完字典樹後,查詢兄弟單詞的效率就會很高了,比雜湊的效率還要高;查到tops的兄弟的單詞的時候,首先排序,那麼就是opts,然後在字典樹中查詢opts,在s處將其vector容器brother中的的單詞輸出就是tops的所有兄弟單詞。

首先定義乙個key,使得兄弟單詞有相同的key,不是兄弟的單詞有不同的key。例如,將單詞按字母從小到大重新排序後作為其key,比如bad的key為abd,good的key為dgoo。

使用鍊錶將所有兄弟單詞串在一起,hash_map的key為單詞的key,value為鍊錶的起始位址。

開始時,先遍歷字典,將每個單詞都按照key加入到對應的鍊錶當中。當需要找兄弟單詞時,只需求取這個單詞的key,然後到hash_map中找到對應的鍊錶即可。

這樣建立hash_map時時間複雜度為o(n),查詢兄弟單詞時時間複雜度是o(1)。

#include 

#include

#include

#include

#include

using

namespace

std;

int brotherword(vector

& dic,string str)

sort(str.begin(), str.end());

for (auto i = 0;i< hash[str].size(); ++i)

return0;}

int main()

程式設計題 查詢兄弟單詞

talk is cheap,show me the code.實現乙個可儲存若干個單詞的字典。使用者可以 在字典中加入單詞 查詢指定單詞在字典中的兄弟單詞個數 查詢指定單詞的指定序號的兄弟單詞,指定序號指字典中兄弟單詞按字典順序排序後的序號 從1開始 清空字典中所有單詞。定義,格式說明 單詞 由小寫...

尋找兄弟單詞

題目 乙個單詞單詞字母交換,可得另乙個單詞,如army mary,成為兄弟單詞。提供乙個單詞,在字典中找到它的兄弟。描述資料結構和查詢過程。解法一 使用hash map和鍊錶 1 首先定義乙個key,使得兄弟單詞有相同的key,不是兄弟的單詞有不同的key。例如,將單詞按字母從小到大重新排序後作為其...

27 查詢兄弟單詞

輸入描述 先輸入字典中單詞的個數,再輸入n個單詞作為字典單詞。輸入乙個單詞,查詢其在字典中兄弟單詞的個數 再輸入數字n 輸出描述 根據輸入,輸出查詢到的兄弟單詞的個數 思路 將所有單詞加入wordlist,然後遍歷查詢 while true try string input strip split ...