首页 存档 技术 查看内容

一个经典编程面试题的“隐退”

2018-3-30 13:00 |来自: 互联网 480 0

摘要: (点击上方公众号,可快速关注我们) 英文:The Noisy Channel 中文:伯乐在线 - 王伯 链接:http://blog.jobbole.com/60798/ 面试程序员很困难。Jeff Atwood 抱怨找一个会写代码的候选人是如此艰难。在技术媒体发 ...

(点击上方公众号,可快速关注我们)


英文:The Noisy Channel

中文:伯乐在线 - 王伯

链接:http://blog.jobbole.com/60798/

面试程序员很困难。Jeff Atwood 抱怨找一个会写代码的候选人是如此艰难。在技术媒体发布的那些“最佳”面试题中,很少有能让我提起兴趣的尽管我很喜欢IKEA的这个面试题。Codility和 Interview Street这样的创业公司从这个具有挑战性的课题中看到了机会。与此同时,Diego Basch 呼吁我们停止逼迫求职者进行白板编程。

对此我没有什么更好的建议。我同意IQ测试和刁难人的问题非常糟糕。在最好的情况下,它仅仅能测试候选人的一项素质;在最坏的情况下,它完全不能说明候选人是因为曾经遇到过相同的问题,还是靠着自己的能力找到了解决方法。编程题对于一个一整天的工作内容就是写代码的人来说是更好的面试方法,但是传统的方法,不论是电话还是面对面交流,都不是最优的测试编程能力的方法。同样,人们也不是很清楚编程题应该是以怎样的形式呈现直接解决问题,还是仅仅把一个算法翻译成可执行的代码?

面对着如此多的挑战,我想到了一个为我以及其他在Endeca、 Google 和LinkedIn工作的同僚们服务了多年的面试题。我带着沉重的心情解这个题,原因我会在结尾中解释。但是首先让我描述下这个问题,并且解释为什么它如此有效。

问题

我把它叫做“分词”问题并解释如下:

给定一个输入的字符串和一个包含各种单词的字典,用空格将字符串分割成一系列字典中存在的单词。举个例子,如果输入字符串是“applepie”而字典中包含了所有的英文单词,那么我们应该得到返回值“apple pie”。

注意,我故意没有解释或者漏掉了一些细节,从而给候选人一个弄清楚问题的机会。 这里我举一些候选人可能会问的问题,以及我会如何回答

问:如果输入字符串本身是一个单词怎么办?

答:可以把它看作一个特殊情况。

问:我只用考虑分割成两个单词的情况吗?

答:不,但是可以从这种情况开始。

问:如果输入字符串无法被分割成单词怎么办?

答:返回null或者类似的东西。

问:有变位或者拼写错误怎么办?

答:只需要严格分割成字典中有的单词。

问:如果有多种分割可能性怎么办?

答:只需要返回任何一个正确的答案。

问:我在想将字典用前缀树,后缀树,Fibonacci堆实现…

答:你不用实现字典。只需要假设它已经被合理地实现了。

问:字典支持哪些操作?

答:字符串查询这就是你所需要的全部

问:字典有多大?

答:假设它远远大于输入字符串,但足够装入内存。

观察求职者如何讨论这些问题,能帮助你了解求职者的沟通技巧和对细节的关注,以及求职者对数据结构和算法的基本理解。

简单解法

题目介绍的足够多了,我们接着看看解法。一些求职者从问题的简易版入手,即只考虑把字符串拆分成两个单词。我把它看作一个“傻瓜”解法,并且期望任何有竞争力的软件工程师可以给出任何等价于下面解法的代码。在我的解答中将使用Java实现。

String SegmentString(String input, Set

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部