Easy
You are given the strings key
and message
, which represent a cipher key and a secret message, respectively. The steps to decode message
are as follows:
key
as the order of the substitution table.message
is then substituted using the table.' '
are transformed to themselves.key = "**hap**p**y** **bo**y"
(actual key would have at least one instance of each letter in the alphabet), we have the partial substitution table of ('h' -> 'a'
, 'a' -> 'b'
, 'p' -> 'c'
, 'y' -> 'd'
, 'b' -> 'e'
, 'o' -> 'f'
).Return the decoded message.
Example 1:
Input: key = “the quick brown fox jumps over the lazy dog”, message = “vkbs bs t suepuv”
Output: “this is a secret”
Explanation: The diagram above shows the substitution table.
It is obtained by taking the first appearance of each letter in “the quick brown fox jumps over the lazy dog”.
Example 2:
Input: key = “eljuxhpwnyrdgtqkviszcfmabo”, message = “zwx hnfx lqantp mnoeius ycgk vcnjrdb”
Output: “the five boxing wizards jump quickly”
Explanation: The diagram above shows the substitution table.
It is obtained by taking the first appearance of each letter in “eljuxhpwnyrdgtqkviszcfmabo”.
Constraints:
26 <= key.length <= 2000
key
consists of lowercase English letters and ' '
.key
contains every letter in the English alphabet ('a'
to 'z'
) at least once.1 <= message.length <= 2000
message
consists of lowercase English letters and ' '
.import java.util.HashMap;
import java.util.Map;
public class Solution {
public String decodeMessage(String key, String message) {
StringBuilder sb = new StringBuilder();
Map<Character, Character> temp = new HashMap<>();
char[] alphabet = new char[26];
int itr = 0;
for (char c = 'a'; c <= 'z'; ++c) {
alphabet[c - 'a'] = c;
}
for (int i = 0; i < key.length(); i++) {
if (!temp.containsKey(key.charAt(i)) && key.charAt(i) != ' ') {
temp.put(key.charAt(i), alphabet[itr++]);
}
}
for (int j = 0; j < message.length(); j++) {
if (message.charAt(j) == ' ') {
sb.append(' ');
} else {
char result = temp.get(message.charAt(j));
sb.append(result);
}
}
return sb.toString();
}
}