题目描述:
国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: "a"
对应 ".-"
, "b"
对应 "-..."
, "c"
对应 "-.-."
, 等等。
为了方便,所有26个英文字母对应摩尔斯密码表如下:
[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
给定一个单词列表,每个单词可以写成每个字母对应摩尔斯密码的组合。例如,"cab" 可以写成 "-.-.-....-",(即 "-.-." + "-..." + ".-"字符串的结合)。我们将这样一个连接过程称作单词翻译。
返回我们可以获得所有词不同单词翻译的数量。
例如: 输入: words = ["gin", "zen", "gig", "msg"] 输出: 2 解释: 各单词翻译如下: "gin" -> "--...-." "zen" -> "--...-." "gig" -> "--...--." "msg" -> "--...--." 共有 2 种不同翻译, "--...-." 和 "--...--.".
注意:
- 单词列表
words
的长度不会超过100
。 - 每个单词
words[i]
的长度范围为[1, 12]
。 - 每个单词
words[i]
只包含小写字母。
解题思路:
1,翻译:将相应字符翻译成对应的摩尔思密码,我这里用比较笨的直译方法,switch来筛选匹配。这是我看到题目第一眼想到的比较直观的方法^_^。在网上有看过不同的答案,有一种比较精简的方法:使用字符ANSCII表匹配摩尔思密码表。推荐大家学习。
2,去重:获取不同的翻译后的字符串数目,方法比较多,可以字符串比较、set、map等等。我这里直接用map,正好刚看过,就用一下^_^。
AC代码:
class Solution {
public:
string Mos(string word){
string strMos = "";
int n = word.length();
for (int i = 0; i < word.length(); i++)
{
switch (word[i])
{
case 'a':
strMos+=".-";
break;
case 'b':
strMos += "-...";
break;
case 'c':
strMos += "-.-.";
break;
case 'd':
strMos += "-..";
break;
case 'e':
strMos += ".";
break;
case 'f':
strMos += "..-.";
break;
case 'g':
strMos += "--.";
break;
case 'h':
strMos += "....";
break;
case 'i':
strMos += "..";
break;
case 'j':
strMos += ".---";
break;
case 'k':
strMos += "-.-";
break;
case 'l':
strMos += ".-..";
break;
case 'm':
strMos += "--";
break;
case 'n':
strMos += "-.";
break;
case 'o':
strMos += "---";
break;
case 'p':
strMos += ".--.";
break;
case 'q':
strMos += "--.-";
break;
case 'r':
strMos += ".-.";
break;
case 's':
strMos += "...";
break;
case 't':
strMos += "-";
break;
case 'u':
strMos += "..-";
break;
case 'v':
strMos += "...-";
break;
case 'w':
strMos += ".--";
break;
case 'x':
strMos += "-..-";
break;
case 'y':
strMos += "-.--";
break;
case 'z':
strMos += "--..";
break;
default:
break;
}
}
return strMos;
}
int uniqueMorseRepresentations(vector<string>& words) {
map<string, int>wordsMap;
for (int i = 0; i < words.size(); i++)
{
wordsMap.insert(pair<string, int>(Mos(words[i]),1));
}
return wordsMap.size();
}
};