Longest Common Substring

求两个字符串中最长的公共部分的长度

长宽为对应两个字符串长度的二维数组dp

dp[i][j] = x 表示在s1[i]和s2[j]的位置上,已经有长度为x的公共字串

if s1[i] == s2[j]

  转移方程为dp[i][j] = dp[i-1][j-1] + 1

  注意当一边的下标为0时,dp[i][j] = 1

  维护最大值

def lcs(s1,s2)
  dp = Array.new(s1.length){Array.new(s2.length,0)}
  s1.length.times do |i|
    s2.length.times do |j|
      if s1[i] == s2[j]
        if i == 0 or j == 0
          dp[i][j] = 1
        else
          dp[i][j] = dp[i-1][j-1] + 1
        end
        maxlen = dp[i][j] if maxlen < dp[i][j]
      end
    end
    maxlen
end

 

posted @ 2015-06-17 16:31  lilixu  阅读(127)  评论(0编辑  收藏  举报