Algorithm 二维格上的字符串匹配
我试图查看一个n×m的字符数组,给定一个长度为n+m-1的输入字符串,我需要检查匹配的最大字符数,因为我们只能在任何一步(单调晶格路径)向下或向右移动Algorithm 二维格上的字符串匹配,algorithm,dynamic-programming,Algorithm,Dynamic Programming,我试图查看一个n×m的字符数组,给定一个长度为n+m-1的输入字符串,我需要检查匹配的最大字符数,因为我们只能在任何一步(单调晶格路径)向下或向右移动 在我看来,这似乎是一个动态规划问题,我查看当前的最佳解决方案,看看向下或向右是否匹配,使其更好,并将其与以前计算的值进行比较(这是我正在努力的地方)。任何洞察都会很棒 使用n x m的辅助数组,在每个单元格上存储到该点的最大“匹配”。因此,要计算位置(i,j)的值,可以使用m=MAX([i,j-1];[i-1,j]),因为这是两个可能的方向。最后
在我看来,这似乎是一个动态规划问题,我查看当前的最佳解决方案,看看向下或向右是否匹配,使其更好,并将其与以前计算的值进行比较(这是我正在努力的地方)。任何洞察都会很棒 使用n x m的辅助数组,在每个单元格上存储到该点的最大“匹配”。因此,要计算位置(i,j)的值,可以使用
m=MAX([i,j-1];[i-1,j])
,因为这是两个可能的方向。最后,根据输入矩阵中的(i,j)单元格是否与输入字符串的i+j-1字符匹配,写入(m+1)或m
您可以从左到右、从上到下填充辅助矩阵。当然,整体结果将出现在单元格中(n,m)。为了能够重建导致此最大值的路径,您还必须在每个单元上存储,从中获得最大值m(顶部或左侧)的单元。嘿,我刚刚以此为基础实现了它,非常感谢!对于某些实现来说,索引有点奇怪,但这总是需要一些调试。