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

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

 import java.util.ArrayList;
import java.util.Scanner;
import javax.management.ImmutableDescriptor;
import javax.xml.bind.SchemaOutputResolver; public class Main {
static char[] wordAndNum=new char[50];//存字母和数字
static ArrayList<String> morse=new ArrayList<>();//存摩斯密码
static ArrayList<String> dictionary=new ArrayList<>();//存词典
static ArrayList<String> wait=new ArrayList<>();//输入的编码,等待解码
static ArrayList<String> dicMorse=new ArrayList<>();//词典的莫斯码
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
for(int i=0;;i++)//存字母数字和其对应的摩斯密码
{
String input=scanner.next();
if(input.charAt(0)=='*')
break;
wordAndNum[i]=input.charAt(0);
morse.add(scanner.next());
} while(scanner.hasNext())//存词典
{
String input=scanner.next();
if(input.charAt(0)=='*')
break;
dictionary.add(input);
} while(scanner.hasNext())//存等待解码的密码
{
String input=scanner.next();
if(input.charAt(0)=='*')
break;
wait.add(input);
} for(int i=0;i<dictionary.size();i++)//把词典里面的单词转为string,存到dicMorse
{
String dicMor=dicCast(dictionary.get(i));
dicMorse.add(dicMor);
} for(int i=0;i<wait.size();i++)
{
System.out.println(solve(wait.get(i)));
}//将摩斯码解密为词组 } private static String solve(String string) {
int jz_n=-1,jz=0; //精准匹配的下标,个数
int mh_n=-1,mh=0,mh_length=999; //模糊匹配的下标,个数,模糊字符长度
int length=string.length();//定义摩斯码的长度
int dicmor_length;//定义词组摩斯码的长度;
int num;//匹配的长度
for(int i=0;i<dicMorse.size();i++)
{//遍历每个词组对应的摩斯码
num=0;
dicmor_length=dicMorse.get(i).length();
for(int j=0;j<length&&j<dicmor_length;j++)
{
if(string.charAt(j)==dicMorse.get(i).charAt(j))
num++;
else
break;
}
if(num==dicmor_length&&length==dicmor_length)//当需要解密的摩斯码和词组中的摩斯码完全相等时,则为精准匹配
{
if(jz_n<1)//第一个精确匹配的就是答案
jz_n=i;
jz++;
}
else if((num==dicmor_length&&length>num)||(num==length&&dicmor_length>num))
{//模糊:前面匹配,但:①本身的长度大于词典的密码长;
//或②词典的密码长度大于本身长度
if(mh_length>Math.abs(dicmor_length-length))
{
mh_length=Math.abs(dicmor_length-length);
mh_n=i;
mh++;
}
}
}
if(jz>0)
{
if(jz>1)
return dictionary.get(jz_n)+"!";
else
return dictionary.get(jz_n);
}
else if(mh>0)
return dictionary.get(mh_n)+"?";
else return dictionary.get(0);
}
static String dicCast(String string)//把词典里面的单词转为string
{
String res="";
for(int i=0;i<string.length();i++)
{
for(int j=0;j<26+10;j++)//<26+10
{
if(string.charAt(i)==wordAndNum[j])
{
res+=morse.get(j);
break;
}
}
}
return res;
} }

UVA 508 Morse Mismatches JAVA的更多相关文章

  1. uva 508 - Morse Mismatches(摩斯码)

    来自https://blog.csdn.net/su_cicada/article/details/80084529 习题4-6 莫尔斯电码(Morse Mismatches, ACM/ICPC Wo ...

  2. uva 508 Morse Mismatches

    Samuel F. B. Morse is best known for the coding scheme that carries his name. Morse code is still us ...

  3. UVa 508 Morse Mismatches (模糊暴力)

    题意:莫尔斯电码,输入若干个字母的Morse编号,一个字典和若干编码.对于每个编号,判断它可能的是哪个单词, 如果有多个单词精确匹配,输出第一个单词并加一个“!”:如果无法精确匹配,那么在编码尾部增加 ...

  4. [刷题]算法竞赛入门经典(第2版) 4-6/UVa508 - Morse Mismatches

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,10 ms) //UVa508 - Morse Mismatches #include< ...

  5. 【习题 4-6 UVA - 508】Morse Mismatches

    [链接] 我是链接,点我呀:) [题意] 给你每个字母对应的摩斯密码. 然后每个单词的莫斯密码由其组成字母的莫斯密码连接而成. 现在给你若干个莫斯密码. 请问你每个莫斯密码对应哪个单词. 如果有多个单 ...

  6. UVa 11059 最大乘积 java 暴力破解

    题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...

  7. UVa 1646 (递推 JAVA大数) Edge Case

    题意: 有n个点围成一圈,这n个点的匹配就是没有公共点的边集(这些边只能连接一圈中相邻的两点),求所有匹配的个数. 额,我不会分析..=_=|| 算了几个数,找找规律发现它满足斐波那契数列的递推关系, ...

  8. UVA 1590 IP Networks JAVA

    题意:输入m代表接下来的数据个数,计算接下来输入数据的网络掩码,和最小网络地址. 思路:①子网掩码:先将数据转为二进制,判断从哪一位开始有数据不一样,记下下标index,则子网掩码是index的前面是 ...

  9. UVa 495【大数加法】

    UVa 495 求第n位斐波那契数列,n<=5000. 还是大数问题,这次是大数加法.仿照UVa 623的解法来做.623位数可以一位一位的增,但是这个需要预先给够位数,要是按六位存一个数组元素 ...

随机推荐

  1. LeetCode(108):将有序数组转换为二叉搜索树

    Easy! 题目描述: 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组 ...

  2. 【linux】shell代码,获取当前路径,创建文件夹

    #!/bin/bash CURRENT_PATH=`` cd $CURRENT_PATH MY_LOG=/var/log MY_DB=/var/lib/db [ ! -d $MY_LOG ] & ...

  3. python字典操作用法总结

    基本语法: dict = {'ob1':'computer', 'ob2':'mouse', 'ob3':'printer'} 技巧: 字典中包含列表:dict={'yangrong':['23',' ...

  4. 充分认识Mysql

    使用开源产品是一种潮流.在使用之前,我们首先需要对Mysql 有一定的了解,特别是Mysql 的缺点.只有了解其缺点后,我们才知道,能不能真正的应用到我们的业务场景中去. 2.1 Mysql 数据库简 ...

  5. Nancy 返回值详解

    简介 Nancy 是一个轻量级的,简单粗暴的framework用来构建基于HTTP的各种服务,兼容.Net和Mono.它的返回值也是多种多样的,适应各种不同的情况.包括Response.AsFile( ...

  6. es6 Proxy

    proxy在语言层面去操作一个对象 var user={}; user.fname='Bob'; user.lname="Wood"; user.fullName= functio ...

  7. MySQL的预处理技术

    所谓的预处理技术,最初也是由MySQL提出的一种减轻服务器压力的一种技术! 传统mysql处理流程 1,  在客户端准备sql语句 2,  发送sql语句到MySQL服务器 3,  在MySQL服务器 ...

  8. js/jquery如何获取获取父窗口的元素

    1.$("#父窗口元素ID",window.parent.document); 对应javascript版本为 window.parent.document.getElementB ...

  9. UOJ#53. 【UR #4】追击圣诞老人 树链剖分 k短路

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ53.html 题意 给定一棵有 n 个节点的树. 每一个点有一个权值. 对于每一个 $i$ 给定三个参数 ...

  10. CodeForces 516C Drazil and Park 线段树

    原文链接http://www.cnblogs.com/zhouzhendong/p/8990745.html 题目传送门 - CodeForces 516C 题意 在一个环上,有$n$棵树. 给出每一 ...