欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

解码

程序员文章站 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];}
}
相关标签: 解码