检查给定的摩尔斯电码是否有效
在这个问题中,我们将验证摩尔斯电码。摩尔斯电码方法用于将文本转换为编码格式,在电话发明之前,它对于在两个实体之间进行通信非常有用。
每个字母字符都有标准代码,包含“.”和“−”。代码是根据传输时间制定的,“.”表示短信号,“−”表示长信号。
但是,在本教程中,我们将使用标准化的摩尔斯电码来解码和验证字符串。
以下是标准化摩尔斯电码的表格。
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),因为我们使用常量空间来存储摩尔斯电码。
我们学习了如何验证摩尔斯电码。程序员可以使用空格分隔符分割字符串以获取字符串的所有单词。字符串的每个单词代表字母字符,我们可以检查该单词是否代表任何字符的摩尔斯电码。
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP