804. 唯一摩尔斯密码词 Java leetcode

国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: "a" 对应 ".-""b" 对应 "-...""c" 对应 "-.-.", 等等。

为了方便,所有26个英文字母对应摩尔斯密码表如下:

[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]

给定一个单词列表,每个单词可以写成每个字母对应摩尔斯密码的组合。例如,"cab" 可以写成 "-.-.-....-",(即 "-.-." + "-..." + ".-"字符串的结合)。我们将这样一个连接过程称作单词翻译。

返回我们可以获得所有词不同单词翻译的数量。

例如:
输入: words = ["gin", "zen", "gig", "msg"]
输出: 2
解释: 
各单词翻译如下:
"gin" -> "--...-."
"zen" -> "--...-."
"gig" -> "--...--."
"msg" -> "--...--."

共有 2 种不同翻译, "--...-." 和 "--...--.".

注意:

  • 单词列表words 的长度不会超过 100
  • 每个单词 words[i]的长度范围为 [1, 12]
  • 每个单词 words[i]只包含小写字母。

代码:

class Solution {
    public int uniqueMorseRepresentations(String[] words) {
        String[] numberstr= new String[]{".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};  //所有26个英文字母对应摩尔斯密码表组成数组
        Map<Integer,String> morsemap= new HashMap<Integer,String>();//创建morsemap的hashmap
        Map<String,String> resultmap=new HashMap<String,String>();////创建resultmap的hashmap
        preparenum(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 preparenum(String[] numberstr,Map<Integer,String>morsemap){
            for(int i=0;i<numberstr.length;i++){
                morsemap.put(i+97,numberstr[i]);
            }
    }
}

测试用例及代码:

package com.company;


import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        String[] words ={"gin", "zen", "gig", "msg"};
        System.out.println(uniqueMorseRepresentations(words));

    }
    public static  int uniqueMorseRepresentations(String[] words) {
        String[] numberstr= new String[]{".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};  //所有26个英文字母对应摩尔斯密码表组成数组
        Map<Integer,String> morsemap= new HashMap<Integer,String>();//创建morsemap的hashmap
        Map<String,String> resultmap=new HashMap<String,String>();////创建resultmap的hashmap
        preparenum(numberstr,morsemap);//将每个字母和对应的莫尔斯码进行存储

        for(int i = 0;i<words.length;i++){
            String morse= words[i];//先取出一个单词,例如"gin"
            String result="";
            for(int j=0;j<morse.length();j++){
                int str=morse.charAt(j);//返回指定索引处的 char 值。索引范围为从 0 到 length() - 1,此处int,故返回一个数字
                String strs=morsemap.get(str);//morsemap.get(),从mosremap中取出对应的strs
                result+=strs;//字符串加在一起
            }

            if(resultmap.isEmpty()){
                resultmap.put(morse,result);
            }
            else{
                if(!resultmap.containsValue(result)){
                    resultmap.put(morse,result);//key=morse;value=result,key可以是字符串
                    //把结果的用resultmap的hashmap形式保存
                }
            }
        }
        return resultmap.size();


    }
    private static void preparenum(String[] numberstr,Map<Integer,String>morsemap){
        for(int i=0;i<numberstr.length;i++){
            morsemap.put(i+97,numberstr[i]);//morsemap<k,v>键与值对应
        }
    }
}

猜你喜欢

转载自blog.csdn.net/nsjlive/article/details/82220500