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 ' '
.class Solution {
fun decodeMessage(key: String, message: String): String {
val sb = StringBuilder()
val temp: MutableMap<Char, Char> = HashMap()
val alphabet = CharArray(26)
var itr = 0
var c = 'a'
while (c <= 'z') {
alphabet[c.code - 'a'.code] = c
++c
}
for (i in key.indices) {
if (!temp.containsKey(key[i]) && key[i] != ' ') {
temp[key[i]] = alphabet[itr++]
}
}
for (j in message.indices) {
if (message[j] == ' ') {
sb.append(' ')
} else {
val result = temp[message[j]]!!
sb.append(result)
}
}
return sb.toString()
}
}