问题是这样的:
假设这有一个各种字母组成的字符串,假设这还有另外一个字符串,而且这个字符串里的字母数相对少一些。从算法是讲,什么方法能最快的查出所有小字符串里的字母在大字符串里都有?
String 1: ABCDEFGHLMNOPQRS
String 2: DCGSRQPO
(1) 对于这种操作一种幼稚的做法是轮询第二个字符串里的每个字母,看它是否同在第一个字符串里。从算法上讲,这需要O(n*m)次操作,其中n是string1的长度,m是string2的长度。就拿上面的例子来说,最坏的情况下将会有16*8 = 128次操作。
(2) 一个稍微好一点的方案是先对这两个字符串的字母进行排序,然后同时对两个字串依次轮询。两个字串的排序需要(常规情况)O(m log m)+ O(n log n)次操作,之后的线性扫描需要O(m+n)次操作。同样拿上面的字串做例子,将会需要16*4 + 8*3 = 88加上对两个字串线性扫描的16 + 8 = 24的操作。(随着字串长度的增长,你会发现这个算法的效果会越来越好)
(3) 对第一个字串进行轮询,把其中的每个字母都放入一个Hashtable里(成本是O(n)或16次操作)。然后轮询第二个字串,在Hashtable里查询每个字母,看能否找到。如果找不到,说明没有匹配成功。这将消耗掉8次操作——这样两项操作加起来一共只有24次。不错吧,比前面两种方案都要好。
(4) 如果这样呢——假设我们有一个一定个数的字母组成字串——我给每个字母分配一个素数,从2开始,往后类推。这样A将会是2,B 将会是3,C将会是5,等等。现在我遍历第一个字串,把每个字母代表的素数相乘。你最终会得到一个很大的整数,对吧?然后——轮询第二个字符串,用每个字母除它。如果除的结果有余数,这说明有不匹配的字母。如果整个过程中没有余数,你应该知道它是第一个字串恰好的子集了。这样不行吗?“
转载自: http://sd.csdn.net/a/20110411/295616.html
分享到:
相关推荐
二十六、一次谷歌面试趣事、二十七、Google的面试经历:分别分享了应聘者在谷歌面试中的有趣经历和面试经验。 二十八、IBM面试记:介绍了IBM公司的面试流程和问题类型。 二十九、Infosys面试经历:分享了在印度...
1.26 一次谷歌面试趣事 1.27 Google 的面试经历 1.28 IBM 面试记 1.29 Infosys 面试经历 1.30 搜狐,百度和豆瓣的面试感受 1.31 百度面试归来,经验值又+1 了 1.32 淘宝面试记 1.33 淘宝面试失败总结 1.34 腾讯实习...
书中不仅收录了常见的编程面试题目和解答,还提供了实用的算法解题方法、常见面试错误及避免策略,以及行为和专业问题准备的步骤,另外还包含了一些面试趣事,帮助求职者了解面试官的视角。 Gayle Laakmann是本书的...
Google面试试题详解、面试题及答案和面试小全等内容对学生们准备面试有极大帮助。 工作经历与感悟部分,包括前女软件工程师分享的工作经历、产品经理的工作感悟、工程师的工作方式和谷歌工作魅力的描述。此外,延伸...
这部分内容由成功通过Google面试的求职者分享自己的经历,可以帮助后来者更好地准备面试。其中包括: - 面试过程中遇到的趣事。 - 不同职位的具体面试流程和问题示例。 - 谷歌特有的面试题型和解答思路。 - Google...
- **面试趣事**:这部分通过讲述面试官的角度观察到的一些有趣而具有教育意义的故事,让读者了解到面试中的常见错误,并从中吸取教训,避免自己在面试中犯同样的错误。 **3. 解题策略** - **解题技巧**:书中详细...
- **谷歌面试指南**: 揭示谷歌面试的特点和挑战。 - **苹果面试指南**: 解析苹果面试的特别之处。 - **雅虎面试指南**: 介绍雅虎面试的特色。 5. **面试实战案例**: 分享来自面试官的第一手经验,帮助求职者了解...