LeetCode 804.Unique Morse Code Words (唯一摩尔斯密码词)

LeetCode 804.Unique Morse Code Words (唯一摩尔斯密码词)

题目

链接

https://leetcode-cn.com/problems/unique-morse-code-words/

问题描述

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

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

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

给定一个单词列表,每个单词可以写成每个字母对应摩尔斯密码的组合。例如,"cab" 可以写成 "-.-..--...",(即 "-.-." + "-..."

  • ".-"字符串的结合)。我们将这样一个连接过程称作单词翻译。

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

示例

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

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

提示

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

思路

这道题的思路比较清晰,对于每一个word,将之转换为摩斯电码,使用hashset存储,最后统计这个散列表里面的值即可。

复杂度分析

时间复杂度 O(logn)
空间复杂度 O(1)

代码

C++

int uniqueMorseRepresentations(vector<string> &words) {
    vector<string> ascii = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--",
                            "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--",
                            "--.."};
    unordered_set<string> us;
    for (auto &word : words) {
        string tmp;
        for (auto &cha : word) {
            tmp += ascii[cha - 'a'];
        }
        us.insert(tmp);
    }
    return us.size();

}

Java

  public static int uniqueMorseRepresentations(String[] words) {
    String[] codes = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-",
        ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-",
        "-.--", "--.."};
    HashSet<String> hashset = new HashSet<String>();
    for (int i = 0; i < words.length; i++) {
      String word = words[i];
      StringBuilder sc = new StringBuilder("");
      for (int j = 0; j < word.length(); j++) {
        sc.append(codes[word.charAt(j) - 97]);
      }
      hashset.add(sc.toString());
    }
    return hashset.size();
  }
posted @ 2019-05-18 16:33  cheng102e  阅读(132)  评论(0编辑  收藏  举报