Skip to content

Commit bc4fccb

Browse files
committed
✨ leetcode 第804题
1 parent 1ac5ccd commit bc4fccb

1 file changed

Lines changed: 63 additions & 0 deletions

File tree

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.fuyd.other;
2+
3+
import java.util.HashSet;
4+
import java.util.Set;
5+
6+
/**
7+
* 804. 唯一摩尔斯密码词
8+
* 国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: "a" 对应 ".-", "b" 对应 "-...", "c" 对应 "-.-.", 等等。
9+
*
10+
* 为了方便,所有26个英文字母对应摩尔斯密码表如下:
11+
*
12+
* [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
13+
* 给定一个单词列表,每个单词可以写成每个字母对应摩尔斯密码的组合。例如,"cab" 可以写成 "-.-..--...",(即 "-.-." + "-..." + ".-"字符串的结合)。我们将这样一个连接过程称作单词翻译。
14+
*
15+
* 返回我们可以获得所有词不同单词翻译的数量。
16+
*
17+
* 例如:
18+
* 输入: words = ["gin", "zen", "gig", "msg"]
19+
* 输出: 2
20+
* 解释:
21+
* 各单词翻译如下:
22+
* "gin" -> "--...-."
23+
* "zen" -> "--...-."
24+
* "gig" -> "--...--."
25+
* "msg" -> "--...--."
26+
*
27+
* 共有 2 种不同翻译, "--...-." 和 "--...--.".
28+
*
29+
*
30+
* 注意:
31+
*
32+
* 单词列表words 的长度不会超过 100。
33+
* 每个单词 words[i]的长度范围为 [1, 12]。
34+
* 每个单词 words[i]只包含小写字母。
35+
*
36+
* @author fuyongde
37+
* @date 2020/3/8 13:48
38+
*/
39+
public class Solution804 {
40+
41+
/**
42+
* 哈希集合
43+
* 时间复杂度:O(n),n 是 words 种所有单词的长度之和
44+
* 空间复杂度:O(1)
45+
*/
46+
public int uniqueMorseRepresentations(String[] words) {
47+
String[] morseCodes = new String[]{
48+
".-", "-...", "-.-.", "-..", ".", "..-.", "--.",
49+
"....", "..", ".---", "-.-", ".-..", "--", "-.",
50+
"---", ".--.", "--.-", ".-.", "...", "-", "..-",
51+
"...-", ".--", "-..-", "-.--", "--.."
52+
};
53+
Set<String> seen = new HashSet<>(16);
54+
for (String word : words) {
55+
StringBuilder sb = new StringBuilder();
56+
for (char c : word.toCharArray()) {
57+
sb.append(morseCodes[c - 'a']);
58+
}
59+
seen.add(sb.toString());
60+
}
61+
return seen.size();
62+
}
63+
}

0 commit comments

Comments
 (0)