查詢兄弟單詞 解法一的實現

2021-06-26 14:28:44 字數 1038 閱讀 8930

分類: algorithm

一: ///

struct hash_node

;hash_mapdictmap;

int cmp(   const   void   *a,   const   void   *b)     

int findbro(const string strdic)

plast = p;

p = p->pnext;

}if( p == plast)

else if(p == null)

return 0;

} ///

問題:給定乙個單詞a,如果通過交換單詞中字母的順序可以得到另外的單詞b,那麼定義b是a的兄弟單詞,例如單詞army和mary互為兄弟單詞。現在給定乙個字典,使用者輸入乙個單詞,如何根據字典找出這個單詞有哪些兄弟單詞?要求時間和空間效率盡可能的高。

解法一:

使用hash_map和鍊錶。 

首先定義乙個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)。

解法二:

同樣使用hash_map和鍊錶。

將每乙個字母對應乙個質數,然後讓對應的質數相乘,將得到的值進行hash,這樣兄弟單詞的值就是一樣的了,並且不同單詞的質數相乘積肯定不同。

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

對於使用者輸入的單詞進行計算,然後查詢hash,將鍊錶遍歷輸出就得到所有兄弟單詞。

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

27 查詢兄弟單詞

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

華為OJ(查詢兄弟單詞)

描述 題目描述 知識點查詢 執行時間限制 10m記憶體限制 128輸入 先輸入字典中單詞的個數,再輸入n個單詞作為字典單詞。輸入乙個單詞,查詢其在字典中兄弟單詞的個數 再輸入數字n 輸出根據輸入,輸出查詢到的兄弟單詞的個數 輸出指定的第n個兄弟單詞 樣例輸入 3 abc bca cab abc 1 ...

華為OJ 查詢兄弟單詞

查詢兄弟單詞 輸入描述 先輸入字典中單詞的個數,再輸入n 個單詞作為字典單詞。輸入乙個單詞,查詢其在字典中兄弟單詞的個數 再輸入數字n 輸出描述 根據輸入,輸出查詢到的兄弟單詞的個數 輸入例子 3 abc bca cab abc 1 輸出例子 2 bca 解答 方法一 include include...