Unique Morse Code Words
Problem statement
International Morse Code defines a standard encoding where each letter is mapped to a series of dots and dashes, as follows:
'a'maps to".-",'b'maps to"-...",'c'maps to"-.-.", and so on.
For convenience, the full table for the 26 letters of the English alphabet is given below:
[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
Given an array of strings words where each word can be written as a concatenation of the Morse code of each letter.
- For example,
"cab"can be written as"-.-..--...", which is the concatenation of"-.-.",".-", and"-...". We will call such a concatenation the transformation of a word.
Return the number of different transformations among all words we have.
Example 1:
Input: words = ["gin","zen","gig","msg"]Output: 2Explanation: The transformation of each word is:"gin" -> "--...-.""zen" -> "--...-.""gig" -> "--...--.""msg" -> "--...--."There are 2 different transformations: "--...-." and "--...--.".
Example 2:
Input: words = ["a"]Output: 1
Constraints:
1 <= words.length <= 1001 <= words[i].length <= 12words[i]consists of lowercase English letters.
My solution
/**
* @param {string[]} words
* @return {number}
*/
var uniqueMorseRepresentations = function(words) {
const morseMap = [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
const memo = new Set();
for (const word of words) {
const morse = word.split("").reduce((acc, curr, index) => {
const charCurr = (word.charCodeAt(index) - 97)
acc += morseMap[charCurr]
return acc;
}, "")
if (!memo.has(morse)) {
memo.add(morse)
}
}
return memo.size
};