Unique Morse Code Words
Problem
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.
Constraints
1 <= words.length <= 100
1 <= words[i].length <= 12
words[i]
consists of lowercase English letters.
Solution
The problem Unique Morse Code Words
can be solved using a hash set to count unique transformations.
Implementation
static const int fast_io = []()
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
return 0;
}();
class Solution
{
public:
int uniqueMorseRepresentations(vector<string> &words)
{
string morse_code[26] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--",
"-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."};
unordered_set<string> hashmap;
for (string &word : words)
{
string xform = "";
for (char &ch : word)
xform += morse_code[ch - 'a'];
hashmap.insert(xform);
}
return hashmap.size();
}
};