兄弟单词问题 --百度实习笔试题(2012.5.6)
来源:互联网 发布:初高中教学网络直播 编辑:程序博客网 时间:2024/05/21 11:37
题意:
一个单词,单词字母交换,可得另一个单词,如army->mary,成为兄弟单词。提供一个单词,在字典中找到它的兄弟。描述数据结构和查询过程。
解法1:
常规思路
在字典中找到某一个单词的兄弟,根据题意,它俩必须含有相同的字母组成,即单词里面的字母以及字母个数必须相同。
因为他说的是在字典中查找,所以我们默认字典里面的所有单词都不相同,那么对于字典的数据结构,我们可以使用Trie树,对于Trie树,我摘了一段百度百科上的说明:
字典树,又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。
也就是说, 字典树是专为字符串的查询等操作而生的。回到本题,我们将字典组织成字典树以后,对于某个单词的查询,就要把他的所有兄弟单词的情况列举出来,然后一一和字典树去匹配。经过树的处理,查找的时间就会大大降低。
解法2:
上面那种方法我感觉不好的地方在于先要列举所有兄弟单词的情况,如果一个单词由n个字符组成,则它的兄弟单词的数量将达到 n! 个,而且不好表示,所以可以换个思路。可以把每个单词的字母分离出来,不同的字母可以用不同的素数表示,如从A-Z用{2,3,5,7.......}代表,.然后将代表每个字母的素数乘起来得到的积就可以代表这个独一无二的单词,然后用待查找的单词的素数积和字典里每个单词的素数积比较,相同的话,则可认为他们是兄弟单词。
这样的话,字典里的每一个单词就都可以用一个素数来表示,简化了单词的存储和查询。
- 兄弟单词问题 --百度实习笔试题(2012.5.6)
- 2012 百度实习笔试题-兄弟单词
- [笔试] 查找兄弟单词(2012/5/6 百度实习笔试题)
- 查找兄弟单词(2012/5/6 百度实习笔试题)
- 百度实习笔试题(2012.5.6)
- 百度实习笔试题(2012.5.6)
- 字典中查找兄弟词,如 army 与 mary为兄弟单词(2012.5.6百度实习生笔试)
- 归并排序(2012/5/6 百度实习笔试题)
- 算法题 1 判断两条单链表是否交叉 一百度实习笔试题(2012.5.6)
- 算法题2,merge数组 --百度实习笔试题(2012.5.6)
- 线程和进程区别和联系。什么是“线程安全”(2012.5.6 百度实习笔试题)
- [笔试] 归并排序(2012/5/6 百度实习笔试题) O(1)
- C和C++怎样分配和释放内存,区别是什么 --百度实习笔试题(2012.5.6)
- 百度实习笔试题(6-8题)(2012.05.06)
- 百度暑期实习笔试
- 百度笔试题——单词接龙
- 【算法题】兄弟单词
- [经典面试题][百度]寻找兄弟单词
- IOS 系统消息
- java Servlet 文件下载
- 2014 湘潭市赛感受2
- java string 首字母大写方法
- java Servlet 生成随机验证码
- 兄弟单词问题 --百度实习笔试题(2012.5.6)
- [Android系列—] 2. Android 项目目录结构与用户界面的创建
- [转]cl.exe link.exe 用法详解 C 和 C++ 编译器
- 智能开关研发
- HTTP 1.1与HTTP 1.0的比较
- UIScrollView
- 去掉 full userdata 的 GC 元方法【转】
- 解决google在国内加载很慢或无法打开的问题
- JavaScript权威指南第01章 JavaScript 概述