public int uniqueMorseRepresentations(String[] words) {
String[] numberstr = new String[]{".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."};
Map<Integer, String> morsemap = new HashMap<>();
Map<String,String>resultmap=new HashMap<>();
perparenum(numberstr, morsemap);//将每个字母和对应的莫尔斯密码进行存储
for (int i = 0; i < words.length; i++) {
String morse=words[i];
String result = "";
for(int j=0;j<morse.length();j++){
int str=morse.charAt(j);
String strs=morsemap.get(str);
result+=strs;
}
if(resultmap.isEmpty()){
resultmap.put(morse,result);
}else{
if(!resultmap.containsValue(result)){
resultmap.put(morse,result);
}
}
}
return resultmap.size();
}
private static void perparenum(String[] numberstr, Map<Integer, String> morsemap) {
for (int i = 0; i < numberstr.length; i++) {//97-122为字母a-z的序号,所以从i+97开始依次存入字母对应的序号
morsemap.put(i + 97, numberstr[i]);
}
}
思路:
- 将给定的莫尔斯密码通过循环的方式存入HashMap中,key为每个字母对应的序号
- 通过循环将给定的数组进行切割,提取出每个单词
- 将每个单词转换为char类型逐一获得HashMap中存储的对应该单词的莫尔斯密码
- 将单词完全转化为莫尔斯密码后存入单独创建的resultmap(另一个HashMap)
- 存入时判断resultmap的value中是否包含这个值,不包含的时候才进行存储
- 返回result的长度。