|
| 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