描述
现在有一些英语单词需要做拼写检查,你的工具是一本词典。需要检查的单词,有的是词典中的单词,有的与词典中的单词相似,你的任务是发现这两种情况。单词A与单词B相似的情况有三种:
1、删除单词A的一个字母后得到单词B;
2、用任意一个字母替换单词A的一个字母后得到单词B;
3、在单词A的任意位置增加一个字母后得到单词B。
你的任务是发现词典中与给定单词相同或相似的单词。
输入
第一部分是词典中的单词,从第一行开始每行一个单词,以”#”结束。词典中的单词保证不重复,最多有10000个。
第二部分是需要查询的单词,每行一个,以”#”结束。最多有50个需要查询的单词。
词典中的单词和需要查询的单词均由小写字母组成,最多包含15个字符。
输出
按照输入的顺序,为每个需要检查的单词输出一行。如果需要检查的单词出现在词典中,输出“?x is correct”,?x代表需要检查的单词。如果需要检查的单词没有出现在词典中,则输出”?x: ?x1 ?x2 …?xn”,其中?x代表需要检查的单词,?x1…?xn代表词典中与需要检查的单词相似的单词,这些单词中间以空格隔开。如果没有相似的单词,输出”?x:”即可。
原题链接:http://dsalgo.openjudge.cn/huawen12/1/
解体思路:
词典中的数据量并不算很大,要检索的次数也不是很多,因此采用顺序检索即可。由于有多个相似词时要按输入顺序输出,所以不要对词典排序然后搞什么二分检索之类的了吧。(至少直接这样不行)
对于相似的词,其实就是编辑距离为1.一般的求编辑距离的话是一个动态规划的问题,不过如果只求距离为1的,就针对特殊情况来写即可。
以下代码:
#include <iostream>
#include <string>
using namespace std;