继续玩算法:两个字符串中有没有不一致的字符?

闲着无聊在微信上看到一个皮裤子面试算法的问题,面试者Paul后来用皮裤子的算法赢得了Google的职位。题目如下:

假设这有一个各种字母组成的字符串,假设这还有另外一个字符串,而且这个字符串里的字母数相对少一些。从算法是讲,什么方法能最快的查出所有小字符串里的字母在大字符串里都有?
  比如,如果是下面两个字符串:
  String 1: ABCDEFGHLMNOPQRS
  String 2: DCGSRQPOM
  答案是true,所有在string2里的字母string1也都有。如果是下面两个字符串:
  String 1: ABCDEFGHLMNOPQRS
  String 2: DCGSRQPOZ
  答案是false,因为第二个字符串里的Z字母不在第一个字符串里。

皮裤子给出的算法是把小字符串的字符用质数编码相乘。然后遍历大字符串,如果积能被任何字符整除,没有特殊字符。

看到这里,貌似很精妙,但是仔细推敲有漏洞:
1. 乘除法cpu周期多
2. 如果有26个英文字母,那么需要26个质数,2-101, 用excel整数以后是38位整数。。。这怎么表示和计算?

看完之后真的怀疑人生,难道google这么好混?26个字符,用int当bitmap就好了

忍不住骑墙去看 原文,果然有50个人在评论中质疑,也有人提到bitsmap算法。
但是其中一个中国人的回复让人很钦佩:Xiaonan Ji说这是讲面试经验的最好文章,抛开算法,怎样为心仪的公司面试先去面试别的公司,面试中的心里技巧。。。

解决问题容易,包容别人难

http://blog.sina.com.cn/s/blog_620ccfbf0100r69s.html


btw, 知乎上看了一下算法相关讨论,居然跟奥数一样变成刷题,有专门的线上刷题,高效啊。这样进大公司又能说明什么呢?记得以前scjp考高分的一个网友。。。不过看看一些题目的做法的确很巧妙,欲罢不能,有些题目真的用到奥数知识,比如回文数必须是11的倍数等。。。

出题的人也辛苦,要不断出网上没有的题目。看样以后面试还是出些现实问题看怎样一步一步分析吧。记得以前问无人机遥控的方案就很有意思。

猜你喜欢

转载自steeven.iteye.com/blog/2366567