九章算法面试题21 寻找最近单词对
2015-05-12 14:04
316 查看
九章算法官网-原文网址
http://www.jiuzhang.com/problem/21/题目
初阶:有一篇包含N个单词的文章和M个单词对,对于每个单词对,如果他们在文章中都出现了,求出他们在文章中的最近距离。例如文章为:ABBCABC,那么对于单词对(A,C)的最近距离是1(最后的ABC,A必须在C的前面)进阶:假设N和M都是海量数据,有什么好的方法可以优化?
解答
初阶:扫描文章的单词序列,对于单词对(W1,W2)记录最后一次出现W1的位置P1,当扫描到W2时,计算当前位置和P1的距离,保存下最优的方案。进阶:使用Map-Reduce对各个单词及其位置建立索引。对于一次请求中的单词对(W1,W2)在索引中获得位置列表,遍历两个列表得到结果。如果两个列表的长度相差不大,则线性扫描,如果相差很大,则使用二分法查找。
面试官角度
本题的初阶考察点是编程实现。进阶问题考察点主要是“索引“ ”MapReduce“和在两个数组中招最近元素时,根据数组的长度差距来选择使用线性扫描还是二分查找。相关文章推荐
- 九章算法面试题41 判断单词的包含关系
- 九章算法面试题20 寻找重复的URL
- 【算法面试题】寻找二叉搜索树中两个节点的最近公共祖先节点(转)
- 九章算法面试题25 反转单词序列
- 九章算法面试题56 最近公共祖先
- 九章算法面试题79 寻找峰值
- lintcode&九章算法——Google 面试题 | 字典里面的最长单词 ? 待解决
- 九章算法面试题45 寻找最大的储水容器
- 【面试题之算法部分】LCA最近公共祖先
- 九章算法面试题15 字符串编辑距离
- 九章算法面试题31 子数组的最大差
- 九章算法面试题46 正负交替
- 九章算法面试题62 合并k个排序数组
- 九章算法面试题82 合并有序链表
- 九章算法面试题72 翻转链表I
- 寻找最近公共祖先算法(LCA)
- 九章算法面试题47 分糖果
- 九章算法面试题63 快速幂
- 九章算法面试题83 把0移到数组右边
- 微软亚洲工程院面试题:寻找两个二叉树节点的最近祖先