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

思路:来自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. 《剑指offer》二叉搜索树的后序遍历序列

    本题来自<剑指offer> 二叉搜索树的后序遍历序列 题目: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字 ...

  2. tensorflow(1) 基础: 神经网络基本框架

    1.tensorflow 的计算得到的是计算图graph import tensorflow as tf a=tf.constant([1.0,2.0]) b=tf.constant([3.0,4.0 ...

  3. Django中各目录文件的作用

    一般的项目结构如下(大同小异) my_site是一个项目,blog是项目下的应用之一,可以使用创建命令创建更多的应用. 最上层的django文件夹: 自己手动创建,名字随意. 第二层my_site文件 ...

  4. shell脚本批量创建用户

    #!/bin/bash DATE=$(date +%F_%T) USER_FILE=user.txt echo_color() { == "green" ];then echo - ...

  5. 饮冰三年-人工智能-Python-11之HelloWorld

    1:安装不在介绍,下载软件下一步即可,配置环境变量(Python37会默认配置环境变量的) D:\Programs\Python\Python37\Scripts\;D:\Programs\Pytho ...

  6. Navicat Premium 12.1.8.0安装与激活

    本文介绍Navicat Premium 12.1.8.0的安装.激活与基本使用. 博主所提供的激活文件理论支持Navicat Premium 12.0.x系列和Navicat Premium 12.1 ...

  7. python练习册 0002随机生成验证

    这个题需要用到random库的方法,不用就会忘,暂把random库的常用方法贴出来 import random import string # 随机整数 # randint(a, b),生成a~b之间 ...

  8. Git强制拉取覆盖本地

    1.多条执行 git fetch --all git reset --hard origin/master git pull 2.单条执行 git fetch --all && git ...

  9. ELK收集Nginx自定义日志格式输出

    1.ELK收集日志的有两种常用的方式: 1.1:不修改源日志格式,简单的说就是在logstash中转通过 grok方式进行过滤处理,将原始无规则的日志转换为规则日志(Logstash自定义日志格式) ...

  10. HDU4622 Reincarnation 字符串 SAM

    原文链接https://www.cnblogs.com/zhouzhendong/p/HDU4622.html 题目传送门 - HDU4622 题意 多组数据. 对于每一组数据,给定一个字符串 s , ...