码迷,mamicode.com
首页 > 编程语言 > 详细

九章算法面试题41 判断单词的包含关系

时间:2015-05-12 17:20:16      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:二进制   哈希   leetcode   lintcode   九章算法   

九章算法官网-原文网址

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),缺点是需要高精度运算支持。


面试官角度

方法包含但不限于上述四种。这个题目本身是十分简单的,难点在于你能想到多少种可行办法。考察的是求职者的思维是否活跃。上述的方法各有优劣。同时面试官也可能会跟面试者讨论,如果不限制在小写字母,不限制字符是否重复,算法该做如何的变化?

九章算法面试题41 判断单词的包含关系

标签:二进制   哈希   leetcode   lintcode   九章算法   

原文地址:http://blog.csdn.net/jiuzhang_ninechapter/article/details/45670113

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!