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, “cab” 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.
题意:将给定的字符串转换为对应的莫尔斯电码,计算结果中不同的电码个数。
基本思路,使用vector
将字符映射到对应的莫尔斯电码上,使用一个空的字符串连接起来,将最终生成的字符串插入到字符串的set
里面,最后返回set
的大小即可。时间复杂度
O(nlog(n))
O
(
n
l
o
g
(
n
)
)
。
注:c++
set
基于红黑树,插入复杂度 O(log(n)) O ( l o g ( n ) )
c++源码奉上:
const vector<string> ch2morse{".-","-...","-.-.","-..",".","..-.","--.","....","..",".---",
"-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
class Solution {
public:
int uniqueMorseRepresentations(vector<string>& words) {
set<string> str_set;
string s;
for (const auto &word : words) {
s = "";
for (const auto &ch : word) {
s.append(ch2morse[ch-'a']);
}
str_set.insert(s);
}
return str_set.size();
}
};
STL真是个好东西。