本文源头在此:
先贴题目----
问题是这样的:假设这有一个各种字母组成的字符串,假设这还有另外一个字符串,而且这个字符串里的字母数相对少一些。从算法是讲,什么方法能最快的查出所有小字符串里的字母在大字符串里都有?
比如,如果是下面两个字符串:
String 1: ABCDEFGHLMNOPQRS
String 2: DCGSRQPOM
答案是true,所有在string2里的字母string1也都有。如果是下面两个字符串:
String 1: ABCDEFGHLMNOPQRS
String 2: DCGSRQPOZ
答案是false,因为第二个字符串里的Z字母不在第一个字符串里。
答案不用说,O(n+m)复杂度的算法很容易给出,奇特的是里面提到的面试官Guy给出的如下方法:”如果这样呢 —— 假设我们有一个一定个数的字母组成字串 —— 我给每个字母分配一个素数,从2开始,往后类推。这样A将会是2,B将会是3,C将会是5,等等。现在我遍历第一个字串,把每个字母代表的素数相乘。你最终会得到一个很大的整数,对吧?然后 —— 轮询第二个字符串,用每个字母除它。如果除的结果有余数,这说明有不匹配的字母。如果整个过程中没有余数,你应该知道它是第一个字串恰好的子集了。这样不行吗?“
FT,即使这个方法不太实用,但他确实挺独特的。。
我最怕在面试时,自己得意地给出一个以为已经不能再优化的方法,却看到面试官面无表情地再问一句:还有更好找方法么?~~这个时候,我通常会脑袋一懵,然后开始歇菜。。
不管怎么说,思维能力还是很重要的,肯定比学会如何解决几个具体问题更有用,还是需要多锻炼一下。
阅读(1007) | 评论(1) | 转发(0) |