Skip to content

Commit cc46a57

Browse files
Huffman decoding
1 parent 57572d8 commit cc46a57

File tree

1 file changed

+44
-0
lines changed
  • src/algorithms/huffman_coding/decoding

1 file changed

+44
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package algorithms.huffman_coding.decoding;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
import java.util.Scanner;
6+
7+
public class Main {
8+
private void run() {
9+
Scanner scanner = new Scanner(System.in);
10+
int differentSymbolsNumber = scanner.nextInt();
11+
int encodedMessageLength = scanner.nextInt();
12+
Map<String, Character> decodingTable = new HashMap<>();
13+
for (int i = 0; i < differentSymbolsNumber; i++) {
14+
char symbol = scanner.next().charAt(0);
15+
String code = scanner.next();
16+
decodingTable.put(code, symbol);
17+
}
18+
String encodedMessage = scanner.next();
19+
if (encodedMessage.length() > encodedMessageLength) {
20+
encodedMessage = encodedMessage.substring(0, encodedMessageLength - 1);
21+
}
22+
23+
String decodedMessage = decodeMessage(encodedMessage, decodingTable);
24+
System.out.println(decodedMessage);
25+
}
26+
27+
private String decodeMessage(String encodedMessage, Map<String, Character> decodingTable) {
28+
StringBuilder decodedMessageBuilder = new StringBuilder();
29+
StringBuilder currentCodeBuilder = new StringBuilder();
30+
for (int i = 0; i < encodedMessage.length(); i++) {
31+
currentCodeBuilder.append(encodedMessage.charAt(i));
32+
Character symbol = decodingTable.get(currentCodeBuilder.toString());
33+
if (symbol != null) {
34+
decodedMessageBuilder.append(symbol);
35+
currentCodeBuilder.setLength(0);
36+
}
37+
}
38+
return decodedMessageBuilder.toString();
39+
}
40+
41+
public static void main(String[] args) {
42+
new Main().run();
43+
}
44+
}

0 commit comments

Comments
 (0)