题目
国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: “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、哈希映射。
实现方法
一、哈希映射
class Solution {
public:
int uniqueMorseRepresentations(vector<string>& words) {
unordered_map<string,int> m;
unordered_map<char,string> w;
w['a']=".-";
w['b']="-...";
w['c']="-.-.";
w['d']="-..";
w['e']=".";
w['f']="..-.";
w['g']="--.";
w['h']="....";
w['i']="..";
w['j']=".---";
w['k']="-.-";
w['l']=".-..";
w['m']="--";
w['n']="-.";
w['o']="---";
w['p']=".--.";
w['q']="--.-";
w['r']=".-.";
w['s']="...";
w['t']="-";
w['u']="..-";
w['v']="...-";
w['w']=".--";
w['x']="-..-";
w['y']="-.--";
w['z']="--..";
for(int i=0;i<words.size();i++){
string s;
for(char a:words[i]){
s += w[a];
}
if(m.count(s)>0)
continue;
else
m[s]++;
}
return m.size();
}
};