Skip to main content

唯一摩尔斯密码词

题目

国际摩尔斯密码定义一种标准编码方式, 将每个字母对应于一个由一系列点和短线组成的字符串, 比如: 'a' 对应 '.-', 'b' 对应 '-...', 'c' 对应 '-.-.', 等等.

为了方便, 所有 26 个英文字母对应摩尔斯密码表如下:

['.-','-...','-.-.','-..','.','..-.','--.','....','..','.---','-.-','.-..','--','-.','---','.--.','--.-','.-.','...','-','..-','...-','.--','-..-','-.--','--..']

给定一个单词列表, 每个单词可以写成每个字母对应摩尔斯密码的组合. 例如, 'cab' 可以写成 '-.-..--...', (即 '-.-.' + '.-' + '-...' 字符串的结合). 我们将这样一个连接过程称作单词翻译. 返回我们可以获得所有词不同单词翻译的数量.

注意
  • 单词列表 words 的长度不会超过 100.
  • 每个单词 words[i]的长度范围为 [1, 12].
  • 每个单词 words[i]只包含小写字母.
示例

输入: words = ['gin', 'zen', 'gig', 'msg']

输出: 2

解释:

各单词翻译如下:

'gin' -> '--...-.'

'zen' -> '--...-.'

'gig' -> '--...--.'

'msg' -> '--...--.'

共有 2 种不同翻译, '--...-.' 和 '--...--.'.

题解

题目肯定不难, 注意为防止重复, 用个 Set 存储数据即可.

/**
* @param {string[]} words
* @return {number}
*/
var uniqueMorseRepresentations = function (words) {
const morses = [
'.-',
'-...',
'-.-.',
'-..',
'.',
'..-.',
'--.',
'....',
'..',
'.---',
'-.-',
'.-..',
'--',
'-.',
'---',
'.--.',
'--.-',
'.-.',
'...',
'-',
'..-',
'...-',
'.--',
'-..-',
'-.--',
'--..',
]

const len = words.length
const set = new Set()

for (let i = 0; i < len; i++) {
const item = words[i]
let translation = ''
for (let j = 0; j < item.length; j++) {
translation += morses[item[j].charCodeAt() - 97]
}
set.add(translation)
}

return set.size
}