1. 程式人生 > 其它 >【LeetCode】C++ :簡單題 - 字串 804. 唯一摩爾斯密碼詞

【LeetCode】C++ :簡單題 - 字串 804. 唯一摩爾斯密碼詞

技術標籤:LeetCode# 字串leetcode字串演算法

804. 唯一摩爾斯密碼詞

難度簡單150

國際摩爾斯密碼定義一種標準編碼方式,將每個字母對應於一個由一系列點和短線組成的字串,比如:"a"對應".-","b"對應"-...","c"對應"-.-.", 等等。

為了方便,所有26個英文字母對應摩爾斯密碼錶如下:

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

給定一個單詞列表,每個單詞可以寫成每個字母對應摩爾斯密碼的組合。例如,"cab" 可以寫成 "-.-..--...",(即 "-.-." + ".-" + "-..." 字串的結合)。我們將這樣一個連線過程稱作單詞翻譯。

返回我們可以獲得所有詞不同單詞翻譯的數量。

例如:
輸入: words = ["gin", "zen", "gig", "msg"]
輸出: 2
解釋: 
各單詞翻譯如下:
"gin" -> "--...-."
"zen" -> "--...-."
"gig" -> "--...--."
"msg" -> "--...--."

共有 2 種不同翻譯, "--...-." 和 "--...--.".

注意:

  • 單詞列表words的長度不會超過100
  • 每個單詞words[i]的長度範圍為[1, 12]
  • 每個單詞words[i]只包含小寫字母。

題意理解半天。。。

簡單說一下思路:

把穿進去的單詞列表的單詞字母,用給定的密碼錶重新組合,用set儲存重組的單詞這樣得到的結果是不重複的。

class Solution {
public:
    int uniqueMorseRepresentations(vector<string>& words) {
        vector<string> vec = {
        ".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",
        ".-..", "--","-.", "---",".--.","--.-",".-.","...","-","..-","...-",
        ".--","-..-","-.--","--.."      
        };
        unordered_set<string> res;
        for(int i = 0; i < words.size(); i++){
            string s = "";
            for(int j = 0; j < words[i].size(); j++){
                s += vec[words[i][j] - 'a'];
            }
            res.insert(s);
        }
        return res.size();
    }
};