在下面的算法中,我计算字符“1”出现的次数,并且在每个字符串中也处于相同的位置。

    def coeff3(a: String, b: String): Float = {
    val aArray = a.toArray
    val bArray = b.toArray
    var i, intersectCounter = 0;
    def coeff1: Int = {
      if ((aArray(i).asDigit == 1) && (bArray(i).asDigit == 1)) {
        intersectCounter += 2
      }
      i = i + 1
      if ((aArray.size) == i)
        intersectCounter
      else
        coeff1
    }

    coeff1

  }                                               //> coeff3: (a: String, b: String)Float

  val str1 = "10110"                              //> str1  : String = 10110
  val str2 = "10111"                              //> str2  : String = 10111

    coeff3(str1 , str2)  > res2: Float = 6.0

可以看到coeff3(str1 , str2)返回6。有没有一种更实用的方法来解决这个问题,而不是这种递归方法?

最佳答案

一种方法是将它们转换为整数,然后对它们的成对产品求和,如下所示:

scala> (str1,str2).zipped.map(_.asDigit * _.asDigit).sum * 2
res19: Int = 6

另一种方法是:
scala> str1.zip(str2).count( _ == ('1','1') ) * 2
res77: Int = 6

10-02 03:49
查看更多