解码
程序员文章站
2022-03-05 10:02:50
...
解码
描述:
通常要求根据给定的编码本对密文进行解码。现已给定相应字符的哈夫曼编码,要求根据编码对密文进行解码。
输入:
输入的第一行为出现的字符的个数n,接下来n行为字符及对应字符的哈夫曼编码,相应字符后为冒号和一空格,然后是哈夫曼编码。
然后一个自然数m,表示m行需要进行解码的“0”、“1”符号串。
接下来m行分别为“0”、“1”符号串,即需要解码的串。
输出:
对每一行需要解码的串,进行解码,并输出解码后的结果。
样例输入:
3
a: 00
b: 01
c: 1
2
00000111
0001110001
样例输出:
aabcc
abccab
思路:输入数据 相应字符后为冒号和一空格,然后是哈夫曼编码 根据这一特征对字符串进行划分,split(“: “)划分成两个子串,由于每一个要编码的字符都有两个数据,一是字符,二是编码,所以定义一个类来存放,最后就是匹配的问题了,匹配要注意到匹配超过字符串尾部的情况。
package easyProgram;
import java.util.Scanner;
public class decode {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
int n = sc.nextInt();
String s ;
K[] k = new K[n];
s = sc.nextLine();
for(int i = 0 ;i<n;i++)
{
s = sc.nextLine();
// System.out.println(s);
k[i] = new K();
k[i].s = s.split(": ");
}
/*for(int i = 0;i<n;i++)
{
System.out.println(k[i].s[1]);
}
*/
int f = sc.nextInt();
s = sc.nextLine();
while(f--!=0)
{
s = sc.nextLine();
for(int i =0;i<s.length();i++)
{
for(int j = 0 ;j<n;j++)
{
// System.out.println(s.substring(i,i+k[i].s[1].length()));
if(i+k[j].s[1].length()<=s.length()) {
if(k[j].s[1].equals(s.substring(i,i+k[j].s[1].length())))
{
System.out.print(k[j].s[0]);
i=i+k[j].s[1].length()-1;
break;
}
}
else {
if(k[j].s[1].equals(s.substring(i)))
{
System.out.print(k[j].s[0]);
i=i+k[j].s[1].length()-1;
// j=-1;
break;
}
}
}
}
System.out.println();
}
}
}
class K{
String[] s;
public K() {s = new String[2];}
}
上一篇: 怎样操作node.js默认npm安装目录
下一篇: linux如何开启root权限
推荐阅读
-
我已经把session数据存入数据库了,我想手动解码获取所有session_id数据,怎么写呢?
-
PHP解码unicode编码的中文字符代码分享_php实例
-
js对图片base64编码字符串进行解码并输出图像示例
-
JS对URL字符串进行编码/解码分析
-
php制作unicode解码工具(unicode编码转换器)代码分享_PHP
-
JavaScript中各种编码解码函数的区别和注意事项_javascript技巧
-
HTML5实战与剖析之媒体元素(4、检测编解码器的支持和Audio构造函数)
-
javascript - 浏览器的解码顺序(html解码、url解码以及js解码)
-
php用于编码和解码的函数有哪些?
-
基于google zxing的Java二维码生成与解码