804. Unique Morse Code Words
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:
[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
Now, given a list of words, each word can be written as a concatenation of the Morse code of each letter. For example, "cba" can be written as "-.-..--...", (which is the concatenation "-.-." + "-..." + ".-"). We'll call such a concatenation, the transformation of a word.
Return the number of different transformations among all words we have.
Example:
Input: words = ["gin", "zen", "gig", "msg"]
Output: 2
Explanation:
The transformation of each word is:
"gin" -> "--...-."
"zen" -> "--...-."
"gig" -> "--...--."
"msg" -> "--...--."
There are 2 different transformations, "--...-." and "--...--.".
Note:
- The length of
words
will be at most100
. - Each
words[i]
will have length in range[1, 12]
. words[i]
will only consist of lowercase letters.
题目描述:我们可以将单词描述为摩斯密码,问在一组单词中有多少个代表的莫斯密码是不同的。
题目分析:和 LeetCode 929. Unique Email Addresses 很类似,也是为了过滤掉重复的元素,我们可以用set集合去过滤。然后把单词转换为莫斯密码,然后过滤即可。
python
代码:
class Solution(object):
def uniqueMorseRepresentations(self, words):
"""
:type words: List[str]
:rtype: int
"""
maps = [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
words_length = len(words)
morse_code = set()
for i in range(words_length):
word_string = words[i]
word_string_length = len(word_string)
string_code = ''
for i in range(word_string_length):
string_code += maps[ord(word_string[i]) - 97]
morse_code.add(string_code)
return len(morse_code)
C++
代码:
class Solution {
public:
int uniqueMorseRepresentations(vector<string>& words) {
set<string> morse_code;
vector<string> string_code(words.size());
vector<string> maps = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
// a b c d e f g h i j k l m n o p q r s t u v w x y z
// 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
for(int i = 0; i < words.size(); i++){
for(int j = 0; j < words[i].size(); j++){
string_code[i].append(maps[words[i][j] - 'a']);
}
}
for(int i = 0; i < string_code.size(); i++){
morse_code.insert(string_code[i]);
}
return morse_code.size();
}
};