LCS(最大公共序列) scala版本

本文介绍了一种基于矩阵构建的最长公共子序列(LCS)算法实现,并提供了具体的Scala代码示例。该算法通过比较两个字符串来找出它们之间的最长公共子序列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个算法也是学习自七月算法,也请教了醉清风网友,非常感谢他的指点。通过构建矩阵的方式匹配。具体如下,整体与Java或C++版本在写法上没有本质区别,主要是熟悉了二元数组以及循环等。这个写法还有可以改进的地方,不过由于暂时没时间改了,等往后闲下来再修改(比如跟之前贴的算法一样,写成隐式转换,比如while循环写入def,还可以尝试用其他方式构造矩阵,比如列表数组、数组向量等)

object LCS extends App {
  def main(args:Array[Int]) {}
  def LCS(sub1:String, sub2:String)  {
    val opt = Array.ofDim[Int](sub1.length + 1, sub2.length + 1)
    for (i <- 0 until sub1.length reverse) {
      for(j <- 0 until sub2.length reverse) {
        if (sub1(i) == sub2(j))
          opt(i)(j) = opt(i + 1)(j + 1) + 1
        else
          opt(i)(j) = (opt(i + 1)(j).max(opt(i)(j + 1)))
    }
  }
      println("sub1:" + sub1)
      println("sub2:" + sub2)
      print("LCS:")
  var i = 0
  var j = 0
  
  while(i < sub1.length && j < sub2.length) {
    if (sub1(i) == sub2(j)) {
      print(sub1(i))
      i += 1
      j += 1
    } else if (opt(i + 1)(j) >= opt(i)(j + 1))
      i += 1
    else
      j += 1
  }
}
  val a = "abcfd"
  
  val b = "bcfkjds"
  
  LCS(a,b) //LCS:bcfd
  
}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值