《编程珠玑》-第二章:寻找兄弟单词+电话簿功能 算法研究
2012-06-23 11:07
323 查看
寻找兄弟单词:这是我百度实习笔试的时候一道题目,面试的时候在HR的房间看到了我的试卷,发现这题我只得了两分。。。这两分还是因为我想到了用树结构,不过只是简单的26叉字典树。。。。 当时想到应该没有这么简单,可是时间紧迫阿。
题目是这样的:兄弟单词(在《编程珠玑》一书中称为换位词),就是只使用项目的字母,不同的组合构成不同的单词deposit,dopiest,posited,topside就是一组兄弟单词,设计数据结构来存储这些兄弟单词。
题目变形:手机的电话簿功能,比如我的名字金子,输入拼音时只需要按 546 94,但是不同的名字,可能有相同的数据序列表示。
出发点:让兄弟单词具有同样的标识,比如 deposit ,dopiest,posited,topside,就可以将单词中的字母排序 ,标识就为deiopst了;标识的改进,比如单词是mississippi这一单词,按照字母排序结果为iiiimppssss重复的字母很多,可以简化为i4mp2s4,m后面没有数字表示m只出现了一次。于是可以设计成数据结构:读进来一个单词,首先将单词中的字母排序,得到一个标识,每个标识后面链接一个链表,链表里每个节点存放的是该标识中的字母可以组成的单词,值得注意的是,兄弟单词的数目一般都小于他们的标识中字母全排列的个数。
至于标识的存储,是采用字典树呢?还是每个标识作为一个节点,组成二元查找树呢?我还没想好,因为题目的难点是你要想到使用“标识”(好绕嘴阿)。至于电话簿的功能,《编程之美》上有,我记得是类似于三阶树的原理。
相关文章推荐
- 【算法题】兄弟单词
- 《编程珠玑》第二章 “杂技算法” 和 “翻转算法” C语言实现
- [经典面试题][百度]寻找兄弟单词
- 兄弟你留下了上千行的思路凌乱功能脆弱算法模糊有Linq有多线程的代码拍屁股就走人了很是让我们郁闷啊 推荐
- 《编程珠玑》第二章——“啊哈!算法”
- 一次寻找邻居单词列表的算法优化
- 算法导论第二章问题研究
- 字符串处理算法(四)现在一个给定字符串中寻找子串的功能(不能使用库函数)[2014百度笔试题]
- 兄弟你留下了上千行的思路凌乱功能脆弱算法模糊有Linq有多线程的代码拍屁股就走人了很是让我们郁闷啊 推荐
- 数据结构与算法——提供一个单词,在字典中找到它的兄弟
- 《编程珠玑》 第二章 算法 习题
- 《编程珠玑》习题练习In Python——第二章 啊哈!算法
- 单词字典中对兄弟单词查找算法(C++实现)
- 编程珠玑-第二章旋转算法篇
- 兄弟单词 — 两种算法实现
- 《编程珠玑》第二章问题C:找出相同的英文单词(单词改变顺序可以互相转化即为相同)
- JavaScript寻找最长的单词算法
- 编程珠玑第二章读书笔记 第二章 Aha!算法 (手摇法)
- 女神一秒变路人!腾讯研究AI卸妆效果算法出品“一键卸妆”功能
- 寻找兄弟单词(2012.5.6百度实习)