檢查給定的摩爾斯電碼是否有效


在這個問題中,我們將驗證摩爾斯電碼。摩爾斯電碼方法用於將文字轉換為編碼格式,在電話發明之前,它對於在兩個實體之間進行通訊非常有用。

每個字母字元都有標準程式碼,包含“.”和“−”。程式碼是根據傳輸時間制定的,“.”表示簡訊號,“−”表示長訊號。

但是,在本教程中,我們將使用標準化的摩爾斯電碼來解碼和驗證字串。

以下是標準化摩爾斯電碼的表格。

A

".−"

H

"...."

O

"−−−"

V

"...−"

B

"−...",

I

".."

P

".−−."

W

".−−"

C

"−.−."

J

".−−−"

Q

"−−.−"

X

"−..−"

D

"−.."

K

"−.−"

R

".−."

Y

"−.−−"

E

"."

L

".−.."

S

"..."

Z

"−−.."

F

"..−."

M

"−−"

T

"−"

G

"−−."

N

"−."

U

"..−"

問題陳述 - 我們得到一個包含摩爾斯電碼的字串。我們需要檢查摩爾斯電碼是否有效。

示例

輸入

morseCode = "− ..− − −−− .−. .. .−.. ... .−−. −−− .. −. −";

輸出

Yes

解釋 - 解碼字串後,我們得到“TUTORIALSPOINT”。因此,摩爾斯電碼有效。

輸入

morseCode = "−− .−.−.−− −−−−−−";

輸出

No

解釋 - 摩爾斯電碼無效。

輸入

morseCode = "*− .−.−.−− −−−−−−";

輸出

No

解釋 - 摩爾斯電碼包含“*”字元。因此,它無效。

方法 1

在這種方法中,我們將使用 map 資料結構。我們將每個字母字元的摩爾斯電碼儲存為 map 中的鍵,並將字母字元儲存為值。

給定的字串包含每個字元的空格分隔的摩爾斯電碼。因此,我們將獲取字串的每個單詞,並檢查它是否作為 map 中的鍵存在。如果任何一個單詞不存在於 map 中,我們可以說摩爾斯電碼無效。

演算法

步驟 1 - 初始化包含摩爾斯電碼作為鍵和字元作為值的“codeMap”。

步驟 2 - 初始化“tmp”字串以儲存字串的當前單詞。

步驟 3 - 開始遍歷給定字串的每個字元。

步驟 4 - 如果當前字元是空格,則檢查“tmp”字串值是否作為 map 中的鍵存在。如果不存在,則返回 false。否則,重新初始化“tmp”字串。

步驟 5 - 對於“.”和“−”字元,將字元追加到“tmp”字串。

步驟 6 - 在函式結束時返回 true。

示例

#include <bits/stdc++.h>
using namespace std;

bool validateMorse(string mCode){
    map<string, char> codeMap{
        {".-", 'A'}, {"-...", 'B'}, {"-.-.", 'C'}, {"-..", 'D'}, {".", 'E'}, {"..-.", 'F'}, {"--.", 'G'},
        {"....", 'H'}, {"..", 'I'}, {".---", 'J'}, {"-.-", 'K'}, {".-..", 'L'}, {"--", 'M'}, {"-.", 'N'},
        {"---", 'O'}, {".--.", 'P'}, {"--.-", 'Q'}, {".-.", 'R'}, {"...", 'S'}, {"-", 'T'}, {"..-", 'U'},
        {"...-", 'V'}, {".--", 'W'}, {"-..-", 'X'}, {"-.--", 'Y'}, {"--..", 'Z'}, {"-----", '0'},
        {".----", '1'}, {"..---", '2'}, {"...--", '3'}, {"....-", '4'}, {".....", '5'}, {"-....", '6'},
        {"--...", '7'}, {"---..", '8'}, {"----.", '9'}
    };
    string tmp = ""; 
    for (char ch : mCode) {
        if (ch == ' ') {
            // Validate morse code
            if (codeMap.find(tmp) == codeMap.end()) {
                return false;
            }
            tmp = ""; // Reset tmp string
        } else {
            tmp += ch; 
        }
    }
    return true;
}
int main() {
    string morseCode = "- ..- - --- .-. .. .-.. ... .--. --- .. -. -";
    if (validateMorse(morseCode)) {
        cout << "The Morse code is valid." << endl;
    } else {
        cout << "The Morse code is not valid." << endl;
    }
    return 0;
}

輸出

The Morse code is valid.

時間複雜度 - 遍歷字串為 O(N)。

空間複雜度 - O(1),因為我們使用常量空間來儲存摩爾斯電碼。

我們學習瞭如何驗證摩爾斯電碼。程式設計師可以使用空格分隔符分割字串以獲取字串的所有單詞。字串的每個單詞代表字母字元,我們可以檢查該單詞是否代表任何字元的摩爾斯電碼。

更新於: 2023-07-17

200 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告