一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第9天,点击查看活动详情。
唯一摩尔斯密码词
题目如下图所示,也可以在LeetCode题目中找到此题。
题目解析
题目提供素材
-
提供了摩斯密码的定义密码表。
-
提供了一个参数:字符串数组words。
[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
注:words数组中的元素,包含了一个只有小写字母的字符串。数组在1到100之间,其中的元素长度在1到12之间。
我的解读
这道题实在是简单了,没有花里胡哨的算法逻辑,有的就是获取值做对比,要说真正要理解的,就是Set集合的使用吧。
最后再对比所有结果,去重后的数量就是我们要的正确结果了。
解题思路
我最开始的解题思路是每次循环获取到每一个转换后的值,并且将其存储下来。
然后等到下一个转换出来后,跟之前转换好的值做一个对比即可。
不过有个更好的方法,我也是通过题解才想到。
果然还是要利用好基础知识。
Java通过Set集合来保存转换后的值,因为Set集合是不存在重复值的,直接也不用去再通过循环去判断了。
还有一个注意的点,那就是如何通过数组的下标拿到相应的摩尔斯密码。
这里用的是当前字母减去a字母,就可以获得当前字母在二十六个字母中的排序。
这样我们就可以通过简单的循环操作完成这道题了。
代码
class Solution {
public static String[] mosi = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
public int uniqueMorseRepresentations(String[] words) {
Set<String> result = new HashSet<>();
for(String s : words){
StringBuilder code = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
code.append(mosi[c - 'a']);
}
result.add(code.toString());
}
return result.size();
}
}
执行结果
大家一起刷题,确实还挺好。