【百度面试】兄弟词

给你一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义ba的兄弟单词。现在给你一个字典,用户输入一个单词,让你根据字典找出这个单词有多少个兄弟单词。

Ans:(1)

使用hash_map和链表。

首先定义一个key,使得兄弟单词有相同的key,不是兄弟的单词有不同的key。例如,将单词按字母从小到大重新排序后作为其key,比如badkeyabdgoodkeydgoo

使用链表将所有兄弟单词串在一起,hash_mapkey为单词的keyvalue为链表的起始地址。

开始时,先遍历字典,将每个单词都按照key加入到对应的链表当中。当需要找兄弟单词时,只需求取这个单词的key,然后到hash_map中找到对应的链表即可。

这样创建hash_map时时间复杂度为O(n),查找兄弟单词时时间复杂度是O(1)

(2)

只要定义一个合适的特征码,然后用hash结构保存,就可以达到O(1)的解法。

比如:对单词aadb 定义特征码如下a2b1d1 dddabc的特征码是a1b1c1d3,以此类推(各位大侠可以设计更好的特征码)。

数据结构定义如:hash_map >,其中hash_mapkey是特征码,value是兄弟单词集。首先扫描字典,将所有单词的特征码和相应单词集装入这个数据结构。

查找时,先计算出待查单词的特征码,然后搜索一下hash_map里相应set的大小,就知道有多少个兄弟单词了。

你可能感兴趣的:(数据结构/算法,面试,百度,数据结构,c)