国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: "a"
对应 ".-"
, "b"
对应 "-..."
, "c"
对应 "-.-."
, 等等。
为了方便,所有26个英文字母对应摩尔斯密码表如下:
[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
给定一个单词列表,每个单词可以写成每个字母对应摩尔斯密码的组合。例如,"cab" 可以写成 "-.-.-....-",(即 "-.-." + "-..." + ".-"字符串的结合)。我们将这样一个连接过程称作单词翻译。
返回我们可以获得所有词不同单词翻译的数量。
思路:
1.先单独取出每个单词
2.算出每个单词的摩斯密码
3.比较摩斯密码是否相同
代码:
String[] Morse = { ".-", "-...", "-.-.", "-..", ".", "..-.", "--.",
"....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.",
"--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-",
"-.--", "--.." };
List<String> list = new ArrayList<String>();
for(String word:words){
StringBuffer s = new StringBuffer();
for(int i=0;i<word.length();i++){
int index = word.charAt(i)-97;
//计算摩斯密码
s.append(Morse[index]);
}
//判断摩斯密码是否重复,首次出现就添加到列表中
if(!list.contains(s.toString())){
list.add(s.toString());
}
}
//列表中摩斯密码数量就是唯一摩斯密码词
return list.size();