#P1580. String Matching

String Matching

本题没有可用的提交语言。

描述

判断两个单词是否相同很容易——只需检查字母。但是你如何判断两个单词是否几乎相同呢?“almost”有多接近呢?

有许多近似单词匹配技术。一种是确定最佳子字符串匹配,即逐字比较单词时常见字母的数量。

这种方法的关键是单词可以以任何方式重叠。例如,考虑单词毛细血管和有袋动物。比较它们的一种方法是将它们叠加:

毛细血管

MARSUPIAL

只有一个共同的字母(A)。更好的是下面的叠加:

有两个共同的字母(A和R),但最好的是:

CAPILLARY

MARSUPIAL

它有三个共同的字母(p, I和L)。

两个词的近似度量appx(word1, word2)由:

共同的字母* 2


长度(word1) +长度(word2)

因此,对于这个例子,appx(cil, MARSUPIAL) = 6 /(9 + 9) = 1/3。显然,对于任何单词W, appx(W, W) = 1,这是一个很好的属性,而没有公共字母的单词的appx值为0。

输入

程序的输入将是一系列单词,每行两个,直到文件结束标志-1。

使用上述技术,您将计算行中对单词的appx()并打印结果。

这些单词都是大写的。

输出

CAR CART
TURKEY CHICKEN
MONEY POVERTY
ROUGH PESKY
A A
-1
appx(CAR,CART) = 6/7
appx(TURKEY,CHICKEN) = 4/13
appx(MONEY,POVERTY) = 1/3
appx(ROUGH,PESKY) = 0
appx(A,A) = 1

来源

太平洋西北1999