【发布时间】:2016-05-27 16:01:41
【问题描述】:
我的朋友在一次采访中提出了这个问题。虽然他不记得这个问题的一字不差,但他还是尽其所能地回忆了下面的内容。
一个字符串(一个单词)从发送者发送到接收者。在传输过程中,字符串的一个字母被改变。使用字典查找可能是原始字符串的所有可能单词的列表。您不知道原始字符串是什么,您只能访问收到的字符串和字典。
第一次看到这个问题时,我想到的第一件事是迭代替换字符串中的所有字符,然后将它们与字典中的单词进行比较。如果有匹配项,那么我会将该单词存储在一个数组中。(假设不区分大小写)
例如:
原词:猫
收到的单词:bat
我的算法:
遍历字典,将 OriginalWord.length() 的所有单词放入一个 HashTable 中
[a-z]at.....检查这些是否在哈希表中
b[a-z]t....检查这些是否在 hashTable 中
ba[a-z]....检查这些是否在 hashTable 中
朋友说这是他用的算法,但是面试官说没有优化。我一直在对这个问题进行一些研究,虽然我发现没有一个完全喜欢它。我发现了一些参考 Levenshtein 距离的东西。我对高级算法的了解有限,所以我无法理解它。此外,由于我无法联系面试官,因此我无法回答具体细节(例如,是否允许对字典进行预处理,在某某场景中会发生什么等……)。尽可能解释问题并做出合理的假设。
假设允许对字典进行预处理。在这种情况下问面试官什么问题比较好?有什么更好/更优化的算法可以用来解决这个问题?
【问题讨论】:
-
I have found some that make reference to Levenshtein distance. My knowledge of advanced algorithms is limited so I wasn't able to understand it.这不是高级算法,它是动态编程的教科书示例,这是您在工作面试中应该知道的标准技术。 -
另外,在时间复杂度、levenshtein 距离或接近变量方面,将花费
O(n^2)时间,与此方法相同,假设字典字符串和输入字符串的长度均为n( levenshtein 距离会有更好的常数)
标签: string algorithm data-structures