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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步