最终的网格如下。

我使用下面的公式来计算每个单元格的值。

实现这个公式的伪代码类似于下面这样。

if word_a[i] == word_b[j]:#两个字母相同
    cell[i][j] = cell[i-1][j-1] + 1
else:#两个字母不同
    cell[i][j] = 0

查找单词hish和vista的最长公共子串时,网格如下。

需要注意的一点是,这个问题的最终答案并不在最后一个单元格中!对于前面的背包问题,最终答案总是在最后的单元格中。但对于最长公共子串问题,答案为网格中最大的数字——它可能并不位于最后的单元格中。

我们回到最初的问题:哪个单词与hish更像? hish和fish的最长公共子串包含三个字母,而hish和vista的最长公共子串包含两个字母。

因此Alex很可能原本要输入的是fish。

results matching ""

    No results matching ""