《programming for the puzzled》第17章
涉及到的数据结构:字典基础,哈希。
异位词是字母顺序变化而形成的另外的词。如cinema和iceman。我们有庞大的词语库,我们的工作是将所有的异位词找出来。我们需要将词语库划分为一些组,每组含有彼此为异位词的词语。一种方法是将词语库排序,异位词就彼此相邻。
先用最直观的算法:
对于列表中的每个词v,依次检查列表中每个与v不同的词w,如果v和w是异位词,将w移动到v之后。
1 | # 《programming for the puzzled》实操 |
对于n个词,平均长度m个字母,效率为n2m log m
另一个方法,是将每个词按字母顺序排序,如果结果一样,就是异位词了。
看代码。
1 | # 排序字母法 |
对于n个词,平均长度m个字母,效率为nm(log m + log n)。
接下来再用哈希算法,给每个字母赋一个值,将每个词的字母的数值相加,一致的就是异位词。
1 | # 哈希算法 |
本文代码:https://github.com/zwdnet/MyQuant/blob/master/44/17
我发文章的三个地方,欢迎大家在朋友圈等地方分享,欢迎点“在看”。
我的个人博客地址:https://zwdnet.github.io
我的知乎文章地址: https://www.zhihu.com/people/zhao-you-min/posts
我的微信个人订阅号:赵瑜敏的口腔医学学习园地