最长公共了序列、最长公共子串

1. 最长公共了序列( LCS )问题

    用 lcs( i, j ) 表示 X[ 1...i ] 与 Y[ 1...j ] 的最长公共子序列长度。

   则:

   lcs( i, j ) = 

    1)  i == 0 or j == 0 :   lcs(i, j) = 0.

    2)  若 X[ i ] == Y[ j ] :   lcs( i, j ) = lcs( i-1, j-1 ) + 1.

    3) 若X[ i ] != Y[ j ] : lcs( i, j ) = max{   lcs( i-1 , j ) , lcs( i, j-1 )  }.


2. 最长公共子串( LCS, substring )

   用lcs( i, j ) 表示X[1...i ] 与 Y[ 1...j ] 的最长公共子串长度( 子串是连续的 )。

   则:

   lcs( i, j ) = 

   1) i == 0 or j == 0: lcs( i, j ) = 0.

   2) X[ i ] == Y[ j ] : lcs(i, j ) = lcs( i, j ) + 1.

   3) X[ i ] != Y[ j ]: lcs( i, j ) = 0.

   若X[i] == Y[j], 令 M[i][ j] = 1, 否则M[i][j] = 0, 则相当于寻找M中斜对角线为1最长长度。把斜对角线进行累加即得出最长子串的最大长度。



    

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值