解码

解码
描述:
通常要求根据给定的编码本对密文进行解码。现已给定相应字符的哈夫曼编码,要求根据编码对密文进行解码。
输入:
输入的第一行为出现的字符的个数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];}
}

猜你喜欢

转载自blog.csdn.net/qq_36734025/article/details/78941885