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);
    }
    
}

上一篇 下一篇

猜你喜欢

热点阅读