版权声明: https://blog.csdn.net/li_xunhuan/article/details/90202659
国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: “a” 对应 “.-”, “b” 对应 “-…”, “c” 对应 “-.-.”, 等等。
为了方便,所有26个英文字母对应摩尔斯密码表如下:
[".-","-…","-.-.","-…",".","…-.","–.","…","…",".—","-.-",".-…","–","-.","—",".–.","–.-",".-.","…","-","…-","…-",".–","-…-","-.–","–…"]
给定一个单词列表,每个单词可以写成每个字母对应摩尔斯密码的组合。例如,“cab” 可以写成 “-.-…–…”,(即 “-.-.” + “-…” + ".-"字符串的结合)。我们将这样一个连接过程称作单词翻译。
返回我们可以获得所有词不同单词翻译的数量。
例如: 输入: words = [“gin”, “zen”, “gig”, “msg”] 输出: 2 解释: 各单词翻译如下: “gin” -> “–…-.” “zen” -> “–…-.” “gig” -> “–…--.” “msg” -> “–…--.”
共有 2 种不同翻译, “–…-.” 和 “–…--.”.
单词列表words 的长度不会超过 100。
每个单词 words[i]的长度范围为 [1, 12]。
每个单词 words[i]只包含小写字母。
import java.util.HashMap;
import java.util.HashSet;
class Solution {
private HashMap<Character,String> hashmap= new HashMap<>(26);
private static String[] map = {
".-",
"-...",
"-.-.",
"-..",
".",
"..-.",
"--.",
"....",
"..",
".---",
"-.-",
".-..",
"--",
"-.",
"---",
".--.",
"--.-",
".-.",
"...",
"-",
"..-",
"...-",
".--",
"-..-",
"-.--",
"--.."
};
public int uniqueMorseRepresentations(String[] words) {
char tempChar ='a';
for (int i=0;i<26;i++) {
hashmap.put(tempChar,map[i]);
tempChar++;
}
if (words == null) return 0;
HashSet<String> set = new HashSet<String>();
for (String s : words) {
StringBuilder sb = new StringBuilder();
for (char c : s.toCharArray()) {
sb.append(hashmap.get(c));
}
set.add(sb.toString());
}
return set.size();
}
}
1.实际上要求在一个给定的序列(数组/字符串/字符串数组等)中统计出现过的元素数目,要求不能重复统计相同元素。这个类型的题目实际上很常见,一般的解决方案通过遍历将元素放置于HashSet结构体中,最终返回其结构体元素个数即可。这是HashSet数据结构的一个常见应用 2.我们所要注意的是所要求统计的数据是哪一个,毕竟如此题中,这个需要统计的数据并没有直接给出。需要我们经过遍历,将其写出。 3.简单说明一下两个遍历: 1)第一层是对字符串数组的遍历,String[] words是由多个字符串构成的,我们对字符串一个一个解决,所以需要遍历 2)第二层遍历是由于摩尔密码在HashMap中Key为Character类型,对于String类型变量,需要通过遍历达到字符串到字符的转换