UVA 508 Morse Mismatches JAVA
题意:输入字母和数字的编码,输入词典,输入一段编码,求出对应的单词。
思路:来自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的更多相关文章
- uva 508 - Morse Mismatches(摩斯码)
来自https://blog.csdn.net/su_cicada/article/details/80084529 习题4-6 莫尔斯电码(Morse Mismatches, ACM/ICPC Wo ...
- uva 508 Morse Mismatches
Samuel F. B. Morse is best known for the coding scheme that carries his name. Morse code is still us ...
- UVa 508 Morse Mismatches (模糊暴力)
题意:莫尔斯电码,输入若干个字母的Morse编号,一个字典和若干编码.对于每个编号,判断它可能的是哪个单词, 如果有多个单词精确匹配,输出第一个单词并加一个“!”:如果无法精确匹配,那么在编码尾部增加 ...
- [刷题]算法竞赛入门经典(第2版) 4-6/UVa508 - Morse Mismatches
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,10 ms) //UVa508 - Morse Mismatches #include< ...
- 【习题 4-6 UVA - 508】Morse Mismatches
[链接] 我是链接,点我呀:) [题意] 给你每个字母对应的摩斯密码. 然后每个单词的莫斯密码由其组成字母的莫斯密码连接而成. 现在给你若干个莫斯密码. 请问你每个莫斯密码对应哪个单词. 如果有多个单 ...
- UVa 11059 最大乘积 java 暴力破解
题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...
- UVa 1646 (递推 JAVA大数) Edge Case
题意: 有n个点围成一圈,这n个点的匹配就是没有公共点的边集(这些边只能连接一圈中相邻的两点),求所有匹配的个数. 额,我不会分析..=_=|| 算了几个数,找找规律发现它满足斐波那契数列的递推关系, ...
- UVA 1590 IP Networks JAVA
题意:输入m代表接下来的数据个数,计算接下来输入数据的网络掩码,和最小网络地址. 思路:①子网掩码:先将数据转为二进制,判断从哪一位开始有数据不一样,记下下标index,则子网掩码是index的前面是 ...
- UVa 495【大数加法】
UVa 495 求第n位斐波那契数列,n<=5000. 还是大数问题,这次是大数加法.仿照UVa 623的解法来做.623位数可以一位一位的增,但是这个需要预先给够位数,要是按六位存一个数组元素 ...
随机推荐
- 【python】给正则匹配部分命名
可以用?P<name>的方法给正则匹配的部分命名. 例:要将<字母,数字>的部分命名为test x = "abc <haha,123> test @@&q ...
- laravel 注入那点事
public function delete(Group $groupId, Post $postId) { $postId->delete(); return response()->j ...
- Vue中使用Vue.component定义两个全局组件,用单标签应用组件时,只显示一个组件的问题和 $emit的使用。
解决方法: 定义了两个 Vue.component 在 el 中使用的时候要用 双标签, 用单表标签的时候,只会显示第个 组件间 这样写只显示 welcome-button 组件 <welcom ...
- 多版本python安装第三方库
1.先进入对应版本的python 2.使用命令安装:./pip install xxx
- oracle数据库无法连接 The Network Adapter could not establish
Caused by: java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection 这个错误 ...
- 运维基础——Zabbix 设置Redis监控
https://blog.csdn.net/xundh/article/details/77604357
- module.exports与exports的区别
引言 每一个node.js执行文件,都自动创建一个module对象,同时,module对象会创建一个叫exports的属性,初始化的值是 {} 例子 foo.js exports.a = functi ...
- sharepoint2013 Restore-SPSite 报错,采用数据库还原
PS C:\Users\spadmin> Restore-SPSite http://hz0xw002049:8099 -Path D:\20170731MossSiteSP.bak -Forc ...
- 关于sql和MySQL的语句执行顺序
sql和mysql执行顺序,发现内部机制是一样的.最大区别是在别名的引用上. 一.sql执行顺序 (1) from (3) join (2) on (4) where (5) group by(开始使 ...
- Java基础知识➣Stream整理(二)
概述 在Java数据流用到的流包括(Stream).文件(File流)和I/O流 ,利用该三个流操作数据的传输. Java控制台输入输出流 读取控制台使用数据流: BufferedReader和Inp ...