九章算法面试题41 判断单词的包含关系
2015-05-12 15:26
429 查看
九章算法官网-原文网址
http://www.jiuzhang.com/problem/41/题目
给定两个单词A和B(假设均为小写字母,并且不含重复字母),判断A是否包含B。这里所定义的包含,只需要包含所有的字母即可,不要字母之间的顺序和邻接关系。要求想出尽可能多的方法(不限制复杂度)解答
方法1:枚举法。对于单词A,枚举每个字母,看是否在B中出现,时间复杂度O(nm),空间复杂度O(1)。方法2:哈希表。将A中字母序列转换为字母集合,判断B中每个字母是否在集合中。该集合的结构则是用哈希表实现。时间复杂度O(n+m),空间复杂度O(26)
方法3:二进制。可以用位运算替代方法2中的哈希表,用4字节整数的每一个二进制位代表某个字母是否出现过。时间复杂度O(n+m),空间复杂度O(1)
方法4:素数积。将a,b,c,d,e.. 对应到整数序列的若干素数2,3,5,7,11 …那么每个单词均可以用若干素数的乘积来代表。计算出A和B分别所对应的乘积,判断是否整除即可。时间复杂度O(n+m),空间复杂度O(26),缺点是需要高精度运算支持。
面试官角度
方法包含但不限于上述四种。这个题目本身是十分简单的,难点在于你能想到多少种可行办法。考察的是求职者的思维是否活跃。上述的方法各有优劣。同时面试官也可能会跟面试者讨论,如果不限制在小写字母,不限制字符是否重复,算法该做如何的变化?相关文章推荐
- 九章算法面试题21 寻找最近单词对
- 九章算法面试题25 反转单词序列
- lintcode&九章算法——Google 面试题 | 字典里面的最长单词 ? 待解决
- 九章算法面试题18 复制链表
- 九章算法面试题58 背包问题
- 判断字符串中是否包含某个单词
- shell下判断两个字符串是否有包含关系
- 九章算法面试题82 合并有序链表
- 地理信息系统基础算法(三)判断矩形是否包含点
- lintcode&九章算法——Google 面试题 | 3个非重复子数组最大和
- C语言:【面试题】在二维数组中,每行每列都按照递增的顺序排序,判断数组中是否包含一个数。
- C语言:【面试题】在二维数组中,每行每列都按照递增的顺序排序,判断数组中是否包含一个数。
- 九章算法面试题8 第k大的数
- 九章算法面试题19 最常访问IP
- 九章算法面试题32 小球排序
- 九章算法面试题59 背包问题II
- 九章算法 | Facebook 面试题 : 岛的周长
- 算法面试题之判断整数是否可以被3整除
- 剑指Offer面试题41和为s的两个数字与和为s的连续正数序列,面试题42翻转单词顺序与左旋转字符串
- Atitit.java图片图像处理attilax总结 BufferedImage extends java.awt.Image获取图像像素点image.getRGB(i, lineIndex); 图片剪辑/AtiPlatf_cms/src/com/attilax/img/imgx.javacutImage图片处理titit 判断判断一张图片是否包含另一张小图片 atitit 图片去噪算法的原理与