zoukankan      html  css  js  c++  java
  • leetcode-804-Unique Morse Code Words

    题目描述:

    International Morse Code defines a standard encoding where each letter is mapped to a series of dots and dashes, as follows: "a"maps to ".-""b" maps to "-...""c" maps to "-.-.", and so on.

    For convenience, the full table for the 26 letters of the English alphabet is given below:

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

    Now, given a list of words, each word can be written as a concatenation of the Morse code of each letter. For example, "cab" can be written as "-.-.-....-", (which is the concatenation "-.-." + "-..." + ".-"). We'll call such a concatenation, the transformation of a word.

    Return the number of different transformations among all words we have.

    Example:
    Input: words = ["gin", "zen", "gig", "msg"]
    Output: 2
    Explanation: 
    The transformation of each word is:
    "gin" -> "--...-."
    "zen" -> "--...-."
    "gig" -> "--...--."
    "msg" -> "--...--."
    
    There are 2 different transformations, "--...-." and "--...--.".
    

     

    Note:

    • The length of words will be at most 100.
    • Each words[i] will have length in range [1, 12].
    • words[i] will only consist of lowercase letters.

     

    要完成的函数:

    int uniqueMorseRepresentations(vector<string>& words) 

     

    说明:

    1、这道题给定一个vector,里面存放着多个字符串,字符串中的每一个字母都对应一个摩尔斯码。要求把给定的字符串翻译成摩尔斯码,最后返回有多少种不同的摩尔斯码。

    2、明白题意,这道题也没有什么快速的方法来实现,就直接暴力解法做吧。

    外层循环,取出每个字符串。

    内层循环,取出字符串中的逐个字母,一一对照着翻译成摩尔斯码,最终结果存储在新定义的string中,把string一一加入到set中。

    最后返回set的个数就可以了。

    代码如下:

        int uniqueMorseRepresentations(vector<string>& words) 
        {
            set<string>res;//存储翻译之后的摩尔斯码
            vector<string>morse={".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
            int s1=words.size(),s2;
            string t;//临时变量
            for(int i=0;i<s1;i++)//逐一取出字符串
            {
                s2=words[i].size();
                t="";
                for(int j=0;j<s2;j++)//逐一取出字母
                    t+=morse[words[i][j]-'a'];//翻译成摩尔斯码
                res.insert(t);//存储到set中
            }
            return res.size();
        }
    

    上述代码逻辑清晰,实测6ms,beats 99.70% of cpp submissions。

  • 相关阅读:
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    C语言I博客作业04
    C语言|博客作业02
    作业02
    第一周作业
    学期总结
    第一次作业
  • 原文地址:https://www.cnblogs.com/chenjx85/p/9050380.html
Copyright © 2011-2022 走看看