正如你所看到的,我只是按顺序取下字符串的后缀,然后对列表进行排序。但是,这对我有什么用呢?一旦我有了这个列表,那么我可以通过这个列表的二分搜索,来找到我想要的任何后缀。这个例子很简陋,但是在实际的代码中,你可以很快地做到它,你可以跟踪所有的原始索引,所以你可以引用后缀的原始位置。它与其他搜索算法相比非常快,对于 DNA 分析等事情非常有用。
回到西雅图的面试。我在这个寒冷的房间被 C++ 程序员面试,为了一份 Java 工作。你可以断定,这不是一个非常有趣的面试,我绝对不会认为我会得到这份工作。在多年的时间中,我没有写过任何 C++,而且这个工作是针对 Java 的,当时我是一个 Java 专家。下一个面试官来了,他问我:“如何在字符串中寻找子串?”
太棒了!我在空闲时间里一直在研究这个问题。我当然知道!我跳起来走到白板,向那个家伙解释如何制作一个后缀树,它如何提高搜索性能,修改后的堆排序如何更快,后缀树的工作原理,为什么它比三叉搜索树更好,以及如何在 C 中实现。我想,如果我可以展示如何在 C 中写出来,那么这将证明,我不只是一个核心能力的 Java 码工。