给定一本英语单词词典,请找出所有的变位词集。所谓的变位词是指,组成各个单词的字母完全相同,只是字母排列的顺序不同。
如果只是给出一个词,要在库里查询它的变位词,那么遍历一次库,两个单词比较的时候,开辟char a[256]的空间记录每个字符出现的次数即可。
现在要讲库中每一个单词都归类到某个变位词集中,没法用char a[256]来空间换时间了。
如果内存放得下
第一步
遍历库,对单词中的字符做排序,写入到一张map中,如
word, tops,stop,age
那么map中存放的是:
dorw => word
opst => tops,stop
aeg => age
第二步
然后遍历这张map,逐个输出即可
这个map,可以是std::map <std::string, std::vector<std::string>>,
也可以存在redis里,用一个hash来存所有的key,用list来存各个key对应的单词列表
如果内存放不下
应该用mapreduce来做
map阶段输出
dorw word
opst tops
opst stop
aeg age
reduce阶段拿到的数据已经是排过序的,就好做了。