题目描述: 国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如:
‘a’ 对应 “.-” , ‘b’ 对应 “-…” , ‘c’ 对应 “-.-.” ,以此类推。
为了方便,所有 26 个英文字母的摩尔斯密码表如下:
[".-","-…","-.-.","-…",".","…-.","–.","…","…",".—","-.-",".-…","–","-.","—",".–.","–.-",".-.","…","-","…-","…-",".–","-…-","-.–","–…"]
给你一个字符串数组 words ,每个单词可以写成每个字母对应摩尔斯密码的组合。
例如,“cab” 可以写成 “-.-…–…” ,(即 “-.-.” + “.-” + “-…” 字符串的结合)。我们将这样一个连接过程称作 单词翻译 。
对 words 中所有单词进行单词翻译,返回不同 单词翻译 的数量。
示例 1:
输入: words = [“gin”, “zen”, “gig”, “msg”] 输出: 2 解释: 各单词翻译如下: “gin” -> “–…-.” “zen” -> “–…-.” “gig” -> “–…--.” “msg” -> “–…--.” 共有 2 种不同翻译, “–…-.” 和 “–…--.”.
示例 2:
输入:words = [“a”] 输出:1
提示:
1 <= words.length <= 100 1 <= words[i].length <= 12 words[i] 由小写英文字母组成
c++代码:
class Solution {
public:
int uniqueMorseRepresentations(vector<string>& words) {
int n=words.size();
if(n==0||n==1)return n;
int sum=0;
vector<string> ws = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
map<string,int> m;
for(int i=0;i<n;i++){
int l=words[i].length();
string ss="";
for(int j=0;j<l;j++){
ss=ss+ws[words[i][j]-'a'];
}
if(m[ss]==0){
m[ss]++;
sum++;
}
}
return sum;
}
};
python代码:
class Solution(object):
def uniqueMorseRepresentations(self, words):
res = set()
ws=[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
dic = {}
for word in words:
ss = ''
for ch in word:
ss = ss + ws[ord(ch)-ord('a')]
res.add(ss)
return len(res)
python中使用set()的不重复特性,执行set.add()最后返回set()的长度即可,不需要用map判断是否重复出现。
总结: c++中用map python中用set(), set.add()自动去重
|