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(); } }; C++ 复制 全屏