1、题目如下:
国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: "a" 对应 ".-", "b" 对应 "-...", "c" 对应 "-.-.", 等等。
为了方便,所有26个英文字母对应摩尔斯密码表如下:
[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
给定一个单词列表,每个单词可以写成每个字母对应摩尔斯密码的组合。例如,"cab" 可以写成 "-.-.-....-",(即 "-.-." + "-..." + ".-"字符串的结合)。我们将这样一个连接过程称作单词翻译。
返回我们可以获得所有词不同单词翻译的数量。
例如:
输入: words = ["gin", "zen", "gig", "msg"]
输出: 2
解释:
各单词翻译如下:
"gin" -> "--...-."
"zen" -> "--...-."
"gig" -> "--...--."
"msg" -> "--...--."
共有 2 种不同翻译, "--...-." 和 "--...--.".
注意:
单词列表words 的长度不会超过 100。
每个单词 words[i]的长度范围为 [1, 12]。
每个单词 words[i]只包含小写字母。
2、解题思路:
该题目的意思就是通过输入的单词的每个字母来根据摩尔斯密码表构成一个摩尔斯密码序列,有可能会存在不同单词构成的摩尔斯序列不一样。改题目要求最后将所求得的摩尔斯密码序列列表进行去重并返回其摩尔斯列表中元素的个数即可。理解好题目的意思就可以方便的写代码了。对于摩尔斯密码表可能采用字符串数组进行存储,因为这个摩尔斯密码表中的元素位置正好与字母A-Z元素的位置相对应,如:0->A,25->Z。输入的单词中只包含小写字母,所以在可采用当前字母的ASCII-97即可得到该字母在摩尔斯密码表中所对应的摩尔斯密码元素。对于去除重复可以采用JAVA中的SET集合或者Map。最后返回这个集合的大小即可。
3、代码如下:
class Solution {
public int uniqueMorseRepresentations(String[] words) {
String [] strings={".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
Map<String,String> mapping=new HashMap<String,String>();
for (int i = 0; i < words.length; i++) {
char [] chars=words[i].toCharArray();
String str="";
for(int j=0;j<chars.length;j++){
str+=strings[chars[j]-97];
}
mapping.put(str,str);
}
return mapping.size();
}
}
public class MainClass {
public static String[] stringToStringArray(String input) {
JsonArray jsonArray = JsonArray.readFrom(line);
String[] arr = new String[jsonArray.size()];
for (int i = 0; i < arr.length; i++) {
arr[i] = jsonArray.get(i).asString();
}
return arr;
}
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = in.readLine()) != null) {
String[] words = stringToStringArray(line);
int ret = new Solution().uniqueMorseRepresentations(words);
String out = String.valueOf(ret);
System.out.print(out);
}
}
}