问题描述
微软的Word有一个拼写检查功能,如果你拼写错了单词,它会用红线标出以示提醒,然后给出可能正确的单词。现在要你编程实现类似的一个系统:给定一个词表以及一个待检查的单词,判断这个单词是否在词表中,如果不在词表中,程序应该给出一个相似的单词。
在寻找相似的单词时,你只需要考虑如下几个简单的情况:
1、漏写了一个字母,如把abacus误拼写为abacs
2、多写了一个字母,如把abacus误拼写为abaacus
3、将某处的一个字母写成了另一个字母,如abacus误拼写为abacup
编程实现这个系统。
在寻找相似的单词时,你只需要考虑如下几个简单的情况:
1、漏写了一个字母,如把abacus误拼写为abacs
2、多写了一个字母,如把abacus误拼写为abaacus
3、将某处的一个字母写成了另一个字母,如abacus误拼写为abacup
编程实现这个系统。
输入格式
输入数据的第一行是一个由小写字母组成的字符串,表示要进行拼写检查的单词
第二行是一个数N(1<=N<=100),表示词表中词的数目
接下来有N行,每行都是一个由小写字母组成的字符串,代表词表中的每一个单词
所有字符串的长度在2到20之间
第二行是一个数N(1<=N<=100),表示词表中词的数目
接下来有N行,每行都是一个由小写字母组成的字符串,代表词表中的每一个单词
所有字符串的长度在2到20之间
输出格式
仅输出一个字符串:
1、如果要检查的单词在词表中出现,则原样输出该单词
2、如果要检查的单词在词表中未出现,但在词表中找到相似的单词,则输出在词表中和它相似的那个单词。如果在此表中找到多个相似单词,仅输出在输入文件中最靠前的一个。
3、如果要检查的单词在词表中未出现,并且在词表中找不到与它相似的单词,输出NOANSWER
1、如果要检查的单词在词表中出现,则原样输出该单词
2、如果要检查的单词在词表中未出现,但在词表中找到相似的单词,则输出在词表中和它相似的那个单词。如果在此表中找到多个相似单词,仅输出在输入文件中最靠前的一个。
3、如果要检查的单词在词表中未出现,并且在词表中找不到与它相似的单词,输出NOANSWER
样例输入
abstaine
4
abacus
abstract
abstain
abstainer
4
abacus
abstract
abstain
abstainer
样例输出
abstain
package www.tsinsen.com; import java.util.Scanner; public class A1027 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan=new Scanner(System.in); String str=scan.next(); int n=scan.nextInt(); int flag=0; String[] strs=new String[n]; for(int i=0;i<n;i++) { strs[i]=scan.next(); } for(int i=0;i<n;i++) { if(str.equals(strs[i])) { flag=1; System.out.println(str); } } if(flag==0) { int index=find(str,strs); if(index==-1) { System.out.println("NOANSWER"); } else { System.out.println(strs[index]); } } } public static int find(String str,String[] strs) { for(int i=0;i<strs.length;i++) { //误写情况,只有一个字符不同 if(str.length()==strs[i].length()) { int count=0;//记录字符不同的个数 for(int j=0;j<str.length();j++) { if(str.charAt(j)!=strs[i].charAt(j)) { count++; } if(count>1) { break; } } if(count==1) { return i; } } //str比strs[i]少一个字母情况 else if(str.length()+1==strs[i].length()) { int j; for(j=0;j<str.length();j++) { if(str.charAt(j)!=strs[i].charAt(j)) { if(str.substring(j).equals(strs[i].substring(j+1))) { return i; } else { break; } } } //最后一个字符多余 if(strs[i].substring(j).length()==1) { return i; } } //str比strs[i]多一个字母情况 else if(str.length()-1==strs[i].length()) { int j; for(j=0;j<strs[i].length();j++) { if(str.charAt(j)!=strs[i].charAt(j)) { if(strs[i].substring(j).equals(str.substring(j+1))) { return i; } else { break; } } } //最后一个字符多余 if(str.substring(j).length()==1) { return i; } } } return -1; } }