Chinaunix首页 | 论坛 | 博客
  • 博客访问: 428077
  • 博文数量: 132
  • 博客积分: 2511
  • 博客等级: 大尉
  • 技术积分: 1385
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-11 15:10
文章分类

全部博文(132)

文章存档

2012年(18)

2011年(35)

2010年(60)

2009年(19)

分类: LINUX

2011-05-02 15:38:11

本文源头在此:

先贴题目----

问题是这样的:假设这有一个各种字母组成的字符串,假设这还有另外一个字符串,而且这个字符串里的字母数相对少一些。从算法是讲,什么方法能最快的查出所有小字符串里的字母在大字符串里都有?

比如,如果是下面两个字符串:
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,即使这个方法不太实用,但他确实挺独特的。。
我最怕在面试时,自己得意地给出一个以为已经不能再优化的方法,却看到面试官面无表情地再问一句:还有更好找方法么?~~这个时候,我通常会脑袋一懵,然后开始歇菜。。

不管怎么说,思维能力还是很重要的,肯定比学会如何解决几个具体问题更有用,还是需要多锻炼一下。
阅读(973) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

GFree_Wind2011-05-02 23:30:06

素数的用处很多啊