POJ1035 Spell checker
2019-03-14 本文已影响0人
嗷老板
题目链接:Spell checker,题目与串的匹配有关
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static boolean check(String s1,String s2)
{
char[] c1 = s1.toCharArray();
char[] c2 = s2.toCharArray();
int errorCount = 0;//记录长度相等的两个单词,字符不相同的个数
if(c1.length == c2.length)
{
//如果两个单词都只有一个字符,直接返回true
if(c1.length == 1)
{
return true;
}
//依次比较单词中的每个字符,如果不同字符数等于1,返回true,否则返回false
for(int i=0;i<c1.length;i++)
{
if(c1[i] != c2[i])
{
errorCount++;
}
}
if(errorCount == 1)
{
return true;
}else
{
return false;
}
}else if(Math.abs(c1.length-c2.length) == 1)
//如果两个字符串的长度相差1,就判断两个字符串的大小
{
char[] lengthStr = null;
char[] shortStr = null;
if(c1.length > c2.length)
{
lengthStr = c1;
shortStr = c2;
}else
{
lengthStr = c2;
shortStr = c1;
}
int index = -1;
//首先从第一个位置开始比较
for(int i=0;i<shortStr.length;i++)
{
if(lengthStr[i] != shortStr[i])
{
//如果有两个字符不相等,记录该字符的索引
index = i;
}
//如果index不等于-1,则从记录的长字符的下一个索引开始继续匹配
if(index != -1)
{
for(int j=index;j<shortStr.length;j++)
{
if(lengthStr[j+1] != shortStr[j])
{
return false;
}
}
}
}
return true;
}else
{
//如果两个字符相差字符数大于1,直接返回false
return false;
}
}
public static void main(String[] args) {
//创建字典集合
ArrayList<String> arr = new ArrayList<String>();
Scanner sc = new Scanner(System.in);
String temp = sc.nextLine();
while(!"#".equals(temp))
{
arr.add(temp);
temp=sc.nextLine();
}
temp = sc.nextLine();
while(!"#".equals(temp))
{
if(temp != null)
{
//创建结果集合
ArrayList<String> result = new ArrayList<String>();
boolean b;
boolean isEquals = false;
boolean hasResult = false;
//首先检查单词是否正确,如果正确,输出单词正确,并将isEquals改为true
for(int i=0;i<arr.size();i++)
{
if(temp.equals(arr.get(i)))
{
System.out.println(temp + " is correct");
isEquals = true;
hasResult = true;
break;
}
}
//如果单词不正确,将单词与词典中的词进行匹配,将匹配到的结果放入结果集合中
if(!isEquals)
{
for(int i=0;i<arr.size();i++)
{
b=check(temp,arr.get(i));
if(b)
{
result.add(arr.get(i));
hasResult = true;
}
}
}
//如果结果集合不为空,输出所有结果
if(!result.isEmpty())
{
System.out.print(temp + ": ");
for(int i=0;i<result.size();i++)
{
System.out.print(result.get(i) + " ");
}
System.out.println();
}
//如果都没有匹配上,则只输出输入的单词
if(!hasResult){
System.out.println(temp + ": ");
}
}
temp=sc.nextLine();
}
System.exit(0);
}
}