UVA 508 Morse Mismatches JAVA

题意:输入字母和数字的编码,输入词典,输入一段编码,求出对应的单词。

思路:来自https://blog.csdn.net/qq_41163933/article/details/82224703

  1 import java.util.ArrayList;
  2 import java.util.Scanner;
  3 import javax.management.ImmutableDescriptor;
  4 import javax.xml.bind.SchemaOutputResolver;
  5 
  6 public class Main {
  7     static char[] wordAndNum=new char[50];//存字母和数字
  8     static ArrayList<String> morse=new ArrayList<>();//存摩斯密码
  9     static ArrayList<String> dictionary=new ArrayList<>();//存词典
 10     static ArrayList<String> wait=new ArrayList<>();//输入的编码,等待解码
 11     static ArrayList<String> dicMorse=new ArrayList<>();//词典的莫斯码
 12     public static void main(String[] args) {
 13         Scanner scanner=new Scanner(System.in);
 14         for(int i=0;;i++)//存字母数字和其对应的摩斯密码
 15         {
 16             String input=scanner.next();
 17             if(input.charAt(0)=='*')
 18                 break;
 19             wordAndNum[i]=input.charAt(0);
 20             morse.add(scanner.next());
 21         }
 22         
 23         while(scanner.hasNext())//存词典
 24         {
 25             String input=scanner.next();
 26             if(input.charAt(0)=='*')
 27                 break;
 28             dictionary.add(input);
 29         }
 30         
 31         while(scanner.hasNext())//存等待解码的密码
 32         {
 33             String input=scanner.next();
 34             if(input.charAt(0)=='*')
 35                 break;
 36             wait.add(input);
 37         }
 38         
 39         for(int i=0;i<dictionary.size();i++)//把词典里面的单词转为string,存到dicMorse
 40         {
 41             String dicMor=dicCast(dictionary.get(i));
 42                     dicMorse.add(dicMor);
 43         }
 44         
 45         for(int i=0;i<wait.size();i++)
 46         {
 47             System.out.println(solve(wait.get(i)));
 48         }//将摩斯码解密为词组
 49         
 50     }
 51     
 52     private static String solve(String string) {
 53         int jz_n=-1,jz=0; //精准匹配的下标,个数
 54         int mh_n=-1,mh=0,mh_length=999; //模糊匹配的下标,个数,模糊字符长度
 55         int length=string.length();//定义摩斯码的长度
 56         int dicmor_length;//定义词组摩斯码的长度;
 57         int num;//匹配的长度
 58         for(int i=0;i<dicMorse.size();i++)
 59         {//遍历每个词组对应的摩斯码
 60             num=0;
 61             dicmor_length=dicMorse.get(i).length();
 62             for(int j=0;j<length&&j<dicmor_length;j++)
 63             {
 64                 if(string.charAt(j)==dicMorse.get(i).charAt(j))
 65                     num++;
 66                 else
 67                     break;
 68             }
 69             if(num==dicmor_length&&length==dicmor_length)//当需要解密的摩斯码和词组中的摩斯码完全相等时,则为精准匹配
 70             {
 71                 if(jz_n<1)//第一个精确匹配的就是答案
 72                     jz_n=i;
 73                 jz++;
 74             }
 75             else if((num==dicmor_length&&length>num)||(num==length&&dicmor_length>num))
 76             {//模糊:前面匹配,但:①本身的长度大于词典的密码长;
 77                 //或②词典的密码长度大于本身长度
 78                 if(mh_length>Math.abs(dicmor_length-length))
 79                 {
 80                     mh_length=Math.abs(dicmor_length-length);
 81                     mh_n=i;
 82                     mh++;
 83                 }
 84             }
 85         }
 86         if(jz>0)
 87         {
 88             if(jz>1)
 89                 return dictionary.get(jz_n)+"!";
 90             else
 91                 return dictionary.get(jz_n);
 92         }
 93         else if(mh>0)
 94             return dictionary.get(mh_n)+"?";
 95         else return dictionary.get(0);
 96     }
 97     static String dicCast(String string)//把词典里面的单词转为string
 98     {
 99         String res="";
100         for(int i=0;i<string.length();i++)
101         {
102             for(int j=0;j<26+10;j++)//<26+10
103             {
104                 if(string.charAt(i)==wordAndNum[j])
105                 {
106                     res+=morse.get(j);
107                     break;
108                 }
109             }
110         }
111         return res;
112     }
113 
114 }

 

posted @ 2019-01-28 15:19  付玬熙  阅读(217)  评论(0编辑  收藏  举报