给定一组字符串,比如说
ap***
ab*le
a****
ab***
问题是在给定字符串数量和允许差异的数量的情况下,找出一组字符串是否一致。
因此,对于上述设置,如果我们允许单个不一致的字符串(第二个),答案是“是”,但如果我们不允许不一致的字符串,则答案是“否”。
什么是最好的算法,复杂度是多少?
我提出的每一个解决方案要么需要查看每一个组合,要么就是错误的。例如,您不能只通过并将字符串添加到集合(将 distinct 定义为“不兼容”),因为那样 **, ab ad 将通过。
实际问题(来自 ):问题 M
2417 年,考古学家发现了大量具有重要历史意义的 20 世纪文本文件。尽管有许多重复的文件,但很快就很明显,除了由于时间造成的损坏使大部分文本难以辨认外,它们之间也存在一些分歧。然而,注意到可以使文本组保持一致,即可以通过省略一些(少量)文本来实现文本之间的一致性。例如,文本:
ap***
ab*le
app*e
*p\**e
(其中 * 表示难以辨认的字符)可以通过仅删除第二个文本来保持一致。
输入将由一系列文本集组成。每个集合都以一行开始,指定集合中的文本数量,以及可以删除的最大文本数量。接下来是单独的文本,每行一个。每个文本由至少一个且不超过 250 个字符组成,可以是小写字母或星号。一组中的所有文本将具有相同的长度,并且一组中的文本不会超过 10,000 条。集合序列由包含两个零 (0 0) 的行终止。
每个集合的输出由包含单词“是”或“否”之一的行组成,具体取决于是否可以通过最多删除指定数量的文本来使集合保持一致。
Sample input
4 1
ap***
ab*le
app*e
*pple
3 1
a
b
c
4 2
fred
ferd
derf
frd*
0 0
Sample output
Yes
No
No