檢查給定的摩爾斯電碼是否有效
在這個問題中,我們將驗證摩爾斯電碼。摩爾斯電碼方法用於將文字轉換為編碼格式,在電話發明之前,它對於在兩個實體之間進行通訊非常有用。
每個字母字元都有標準程式碼,包含“.”和“−”。程式碼是根據傳輸時間制定的,“.”表示簡訊號,“−”表示長訊號。
但是,在本教程中,我們將使用標準化的摩爾斯電碼來解碼和驗證字串。
以下是標準化摩爾斯電碼的表格。
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),因為我們使用常量空間來儲存摩爾斯電碼。
我們學習瞭如何驗證摩爾斯電碼。程式設計師可以使用空格分隔符分割字串以獲取字串的所有單詞。字串的每個單詞代表字母字元,我們可以檢查該單詞是否代表任何字元的摩爾斯電碼。