【发布时间】:2018-07-14 19:53:16
【问题描述】:
我有两个字符串数组,我想将第一个数组的每个字符串与第二个数组的每个字符串匹配并显示平均分数。
Kotlin 中的简单实现是:
fun main(args: Array<String>) {
val jw = JaroWinklerDistance()
val a = arrayOf("FRITZ", "FRUITS")
val b = arrayOf("FRITZ", "MARTIN", "FOOBAR")
var score = 0.0
a.forEach { x ->
var current = 0.0
b.forEach { y ->
current = max(current, jw.apply(x, y))
}
score += current
}
score /= a.size
println("Average score $score")
}
打印出来:
Average score 0.9288888888888889
但这不是我需要的。 FRITZ 这个词已经在两个数组中完全匹配。所以它应该匹配剩余的FRUITS 与MARTIN 和FOOBAR。所以平均分应该计算为:
FRITZ - FRITZ : 1
FRUITS - MARTIN : 0.5555555555555555
FRUITS - FOOBAR : 0.4444444444444444
FRITZ = 1
FRUITS = max (0.5555555555555555, 0.4444444444444444)
= 0.5555555555555555
Average score = (1 + 0.5555555555555555) / 2
= 0.7777777777777778
此问题是否与任何现有问题相似?我只是在寻找算法,而不是代码。
我尝试了不同的方法,但没有运气。有人可以帮忙吗?
【问题讨论】:
标签: arrays algorithm kotlin string-matching