TopcoderArchive
SRM24 Jun 2006
SRM 308

HuffmanDecoding

Problem statement, definition, constraints, and public examples.

Problem Statement

When text is encoded using Huffman codes, each symbol is replaced by a string of 0s and 1s called a bit string representation. The replacement is done in such a way that the bit string representation of a symbol is never the prefix of the bit string representation of any other symbol. This property allows us to unambiguously decode the encoded text.

You will be given a String archive and a String[] dictionary. The i-th element of dictionary will be the bit string representation of the i-th uppercase letter. Decode archive using dictionary and return the result as a single String.

Definition

Class:
HuffmanDecoding
Method:
decode
Parameters:
String, String[]
Returns:
String
Method signature:
String decode(String archive, String[] dictionary)
(be sure your method is public)

Constraints

  • archive will contain between 1 and 50 characters, inclusive.
  • archive will contain only the characters '0' (zero) and '1' (one).
  • dictionary will contain between 1 and 26 elements, inclusive.
  • Each element of dictionary will contain between 1 and 50 characters, inclusive.
  • Each element of dictionary will contain only the characters '0' (zero) and '1' (one).
  • No element of dictionary will be a prefix of any other element of dictionary.
  • archive will be decodable using dictionary

Examples

  1. "101101"
    {"00","10","01","11"}
    Returns: "BDC"
    Because there are no elements in dictionary that are prefixes of other elements, only one element of dictionary will be a prefix of archive. In this case, it is the second element ("10") which represents 'B'. The rest of the text can be decoded using the same logic.
  2. "10111010"
    {"0","111","10"}
    Returns: "CBAC"
    Note that elements of dictionary can be of different lengths.
  3. "0001001100100111001"
    {"1","0"}
    Returns: "BBBABBAABBABBAAABBA"
    '1' is replaced by 'A', '0' is replaced by 'B'.
  4. "111011011000100110"
    {"010","00","0110","0111","11","100","101"}
    Returns: "EGGFAC"
  5. "001101100101100110111101011001011001010"
    {"110","011","10","0011","00011","111","00010","0010","010","0000"}
    Returns: "DBHABBACAIAIC"
Back to all problems