题目描述
国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: "a"
对应 ".-"
, "b"
对应 "-..."
, "c"
对应 "-.-."
, 等等。
为了方便,所有26个英文字母对应摩尔斯密码表如下:
[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
给定一个单词列表,每个单词可以写成每个字母对应摩尔斯密码的组合。例如,"cab" 可以写成 "-.-..--...",(即 "-.-." + "-..." + ".-"字符串的结合)。我们将这样一个连接过程称作单词翻译。
返回我们可以获得所有词不同单词翻译的数量。
<strong>输入:</strong> words = ["gin", "zen", "gig", "msg"]
<strong>输出:</strong> 2
<strong>解释: </strong>
各单词翻译如下:
"gin" -> "--...-."
"zen" -> "--...-."
"gig" -> "--...--."
"msg" -> "--...--."
共有 2 种不同翻译, "--...-." 和 "--...--.".
注意:
- 单词列表
words
的长度不会超过100
。 - 每个单词
words[i]
的长度范围为[1, 12]
。 - 每个单词
words[i]
只包含小写字母。
题解
该题主要问题在于如何判断字符在莫斯表中的位置:
tmp += Morse[word.indexOf(each.charAt(i))];
以及如何判断该莫斯密码是否在结果中,添加flag,因为要遍历全部元素:
result[i].equals(tmp)
这里用result[i] == tmp
判断会出错。
==
运用在基本数据类型的时候,通过比较它们实际的值来判断是否相同;而用于比较引用数据类型的时候,则是比较俩个引用的地址是否相等,也就是是否指向一个对象。
equals
方法是java.lang.Object
的方法,也就是所有的java类都会有的方法。它可以被程序员覆盖重写,通过自定义的方式来判断俩个对象是否相等。对于字符串java.lang.String类来说,它的equals方法用来比较字符串的字符序列是否完全相等.
傻瓜式题解
class Solution {
public int uniqueMorseRepresentations(String[] words) {
String[] result = new String[words.length];
String[] Morse = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
String word = "abcdefghijklmnopqrstuvwxyz";
int count = 0;
for(String each : words){
String tmp = "";
for(int i = 0;i < each.length();i++){
tmp += Morse[word.indexOf(each.charAt(i))];
}
boolean flag = true;
for(int i = 0;i < count;i++){
if(result[i].equals(tmp)){
flag = false;
break;
}
}
if(flag){
result[count++] = tmp;
}
}
return count;
}
}
使用HashSet
和Stringbuilder
、toCharArray()
题解
class Solution {
public int uniqueMorseRepresentations(String[] words) {
String[] morse = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
if(words == null) return 0;
HashSet<String> hashSet = new HashSet<String>();
for(String str : words){
StringBuilder sb = new StringBuilder();
for(char c : str.toCharArray()){
sb.append(morse[c - 'a']);
}
hashSet.add(sb.toString()); //将StringBuilder 类型转为String
}
return hashSet.size();
}
}