1. 程式人生 > 其它 >字串 leetcode 804 唯一摩爾斯密碼詞

字串 leetcode 804 唯一摩爾斯密碼詞

技術標籤: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]只包含小寫字母。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/unique-morse-code-words

解答

int uniqueMorseRepresentations(char ** words, int wordsSize){
    int b,c;
    // 把字母對應情況用二元組來表示
    char a[26][5]={".-","-...","-.-."
,"-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."}; // hashmap用來儲存不重複的單詞所對應的摩爾斯密碼 char hashmap[100][60]={0};//不初始化,會導致程式bug,改了好久才發現這裡出問題,好習慣一定要養成 int count=0; //二維字元用來儲存每個單詞對應的摩爾斯密碼 12x4=48 char z[100][48] = {0}; for(int i=0;i<wordsSize;i++){ for(int j=0;j<strlen(words[i]);j++){ //b用來表示這個單詞中某個字母和a間的差,是a的話,差是0,b的話差是1,用b的值來對應每個單詞摩爾斯碼 b=words[i][j]-'a'; //把每個摩爾斯碼拼接到對應的第i個單詞那個 strcat(z[i],a[b]); } //迴圈遍歷hashmap中的字串去比較,有相等則break,跳出的時候c一定不可能大於count,沒有相同的時候c>count; for(c=0;c<=count;c++){ if(strcmp(hashmap[c],z[i])==0){ break; } } //不同字串的時候往hashmap中新增 if(c>count){ strcat(hashmap[c],z[i]); count++; } } return count; }

注意:

每次宣告變數的時候記得初始化,這是個好習慣.還有用字串的strcmp strcat strcpy時候打正確,切記不要看錯.

總結:

構建hashmap來實現檢驗重複.發現python 的集合 字典都有防止重複的作用,這些都是封裝好的,c語言則需要通過程式碼去實現防止重複.所以我認為c語言對練習演算法非常的好,可以去自己實現一些底層的東西.