算法leetcode每日一练804. 唯一摩尔斯密码词
Posted 二当家的白帽子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法leetcode每日一练804. 唯一摩尔斯密码词相关的知识,希望对你有一定的参考价值。
文章目录
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] 由小写英文字母组成
分析
- 面对这道算法题目,二当家的陷入了沉思。
- 将所有单词翻译成摩尔斯密码,看一共翻译出几种就是答案。
题解
java
class Solution
private static final String[] MORSE = ".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..";
public int uniqueMorseRepresentations(String[] words)
Set<String> seen = new HashSet<>();
StringBuilder code = new StringBuilder();
for (String word : words)
code.setLength(0);
for (char c : word.toCharArray())
code.append(MORSE[c - 'a']);
seen.add(code.toString());
return seen.size();
c
#define MAX_STR_LEN 64
typedef struct
char key[MAX_STR_LEN];
UT_hash_handle hh;
HashItem;
const static char * MORSE[26] = ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..";
int uniqueMorseRepresentations(char ** words, int wordsSize)
HashItem * seen = NULL;
for (int i = 0; i < wordsSize; i++)
HashItem * pEntry = NULL;
int len = strlen(words[i]);
int pos = 0;
char code[MAX_STR_LEN];
for (int j = 0; j < len; j++)
pos += sprintf(code + pos, "%s", MORSE[words[i][j] - 'a']);
HASH_FIND_STR(seen, code, pEntry);
if (NULL == pEntry)
pEntry = (HashItem *)malloc(sizeof(HashItem));
strcpy(pEntry->key, code);
HASH_ADD_STR(seen, key, pEntry);
int ans = HASH_COUNT(seen);
HashItem * curr = NULL, * tmp = NULL;
HASH_ITER(hh, seen, curr, tmp)
HASH_DEL(seen, curr);
free(curr);
return ans;
c++
const static string MORSE[] =
".-", "-...", "-.-.", "-..", ".", "..-.", "--.",
"....", "..", ".---", "-.-", ".-..", "--", "-.",
"---", ".--.", "--.-", ".-.", "...", "-", "..-",
"...-", ".--", "-..-", "-.--", "--.."
;
class Solution
public:
int uniqueMorseRepresentations(vector<string>& words)
unordered_set<string> seen;
for (auto &word: words)
string code;
for (auto &c: word)
code.append(MORSE[c - 'a']);
seen.emplace(code);
return seen.size();
;
python
MORSE = [".-", "-...", "-.-.", "-..", ".", "..-.", "--.",
"....", "..", ".---", "-.-", ".-..", "--", "-.",
"---", ".--.", "--.-", ".-.", "...", "-", "..-",
"...-", ".--", "-..-", "-.--", "--.."]
class Solution:
def uniqueMorseRepresentations(self, words: List[str]) -> int:
return len(set("".join(MORSE[ord(ch) - 97] for ch in word) for word in words))
go
var morse = []string
".-", "-...", "-.-.", "-..", ".", "..-.", "--.",
"....", "..", ".---", "-.-", ".-..", "--", "-.",
"---", ".--.", "--.-", ".-.", "...", "-", "..-",
"...-", ".--", "-..-", "-.--", "--..",
func uniqueMorseRepresentations(words []string) int
set := map[string]struct
for _, word := range words
trans := &strings.Builder
for _, ch := range word
trans.WriteString(morse[ch-'a'])
set[trans.String()] = struct
return len(set)
rust
impl Solution
pub fn unique_morse_representations(words: Vec<String>) -> i32
let morse = vec![
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..",
"--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-",
"-.--", "--..",
];
let mut seen = std::collections::HashSet::new();
words.iter().for_each(|word|
let mut code = String::new();
word.as_bytes().iter().for_each(|c|
code.push_str(morse[(c - 97) as usize]);
);
seen.insert(code);
);
seen.len() as i32
typescript
function uniqueMorseRepresentations(words: string[]): number
const morse = "a":".-","b":"-...","c":"-.-.","d":"-..","e":".","f":"..-.","g":"--.","h":"....","i":"..","j":".---","k":"-.-","l":".-..","m":"--","n":"-.","o":"---","p":".--.","q":"--.-","r":".-.","s":"...","t":"-","u":"..-","v":"...-","w":".--","x":"-..-","y":"-.--","z":"--..";
const seen = words.map(word =>
let code = '';
for (let i = 0; i < word.length; i++)
code += morse[word[i]];
return code;
);
return new Set(seen).size;
;
原题传送门:https://leetcode-cn.com/problems/unique-morse-code-words/
非常感谢你阅读本文~
欢迎【👍点赞】【⭐收藏】【📝评论】~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~
以上是关于算法leetcode每日一练804. 唯一摩尔斯密码词的主要内容,如果未能解决你的问题,请参考以下文章