题目
804.唯一摩尔斯密码词
题目大意
国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如:
'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]
由小写英文字母组成
思路
题目很简单,就是
26
26
26个字母每个字母对应了一个摩斯密码
s
t
r
i
n
g
string
string,然后把它们拼凑起来,看有多少种不同的摩斯密码
s
t
r
i
n
g
string
string,很显然用哈希表会很方便,如果C++
就可以直接使用unordered_set<string>mp
之类的。不过这类偏字符串形式的题目用python
,那真是太舒服了,直接将莫斯表复制进去,然后用set
来存结果,最后输出len(set)
即可。
代码
class Solution:
def uniqueMorseRepresentations(self, words: List[str]) -> int:
l=[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
ans=set([])
for word in words:
s=""
for i in range(len(word)):
s+=l[ord(word[i])-ord('a')]
ans.add(s)
return len(ans)
简化之后的代码:
class Solution:
def uniqueMorseRepresentations(self, words: List[str]) -> int:
l=[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
return len(set("".join(l[ord(x)-ord('a')] for x in word)for word in words))