#P1035. Spell checker

Spell checker

描述

你作为一个新拼写检查程序开发团队的成员,需要编写一个模块,利用一个已知的包含所有正确单词及其各种形式的字典来检查给定单词的正确性。

如果某个单词不在字典中,那么可以用通过以下操作之一从字典中得到的正确单词来替换它:

- 从单词中删除一个字母;

- 用任意一个字母替换单词中的一个字母;

- 在单词中插入任意一个字母。

你的任务是编写一个程序,为每个给定的单词找出字典中所有可能的替换词。

输入

输入文件的第一部分包含字典中的所有单词。每个单词占一行。这部分以单独一行上的单个字符 '#' 结束。所有单词都不同。字典中最多有 10000 个单词。

文件的下一部分包含所有需要检查的单词。每个单词占一行。这部分同样以单独一行上的单个字符 '#' 结束。最多有 50 个需要检查的单词。

输入文件中的所有单词(字典中的单词和需要检查的单词)仅由小写字母组成,且每个单词最多包含 15 个字符。

输出

按照输入文件第二部分中需要检查的单词的出现顺序,为每个单词在输出文件中准确地写入一行。如果单词正确(即它存在于字典中),则写入消息:" 是正确的"。如果单词不正确,则先写入这个单词,然后写入字符 ':'(冒号),在一个空格之后写入所有可能的替换词,用空格分隔。替换词应按照它们在字典(输入文件的第一部分)中的出现顺序写入。如果这个单词没有替换词,则冒号后面应紧跟换行符。

i
is
has
have
be
my
more
contest
me
too
if
award
me
aware
m
contest
hav
oo
or
i
fi
mre
#
me 是正确的
aware: award
m: i my me
contest 是正确的
hav: has have
oo: too
or:
i 是正确的
fi: i
mre: more me

来源

1998 年欧洲东北部地区竞赛