b515 - 摩斯電碼-商競103
題目描述
題目要求將輸入的摩斯電碼轉換為對應的英文字。輸入包含多組測試資料,每組資料為一串以空格分隔的摩斯電碼,輸出對應的英文字。
解題思路
此題的核心是建立摩斯電碼與字母之間的對應關係。程式使用一個字串陣列 a 儲存了所有字母的摩斯電碼。程式逐行讀取輸入,將每行輸入分割成單個摩斯電碼,然後在 a 陣列中查找匹配的電碼,並輸出對應的字母。由於字母的索引位置與字母的順序相關,因此使用一個字符變數 c 來追蹤當前字母。
複雜度分析
- 時間複雜度: O(N * M),其中 N 是輸入的摩斯電碼字串的數量,M 是每個字串中摩斯電碼的數量。在最壞的情況下,需要遍歷整個陣列
a來查找匹配的摩斯電碼。 - 空間複雜度: O(1),因為使用的額外空間是固定的,不隨輸入大小而變化。
程式碼
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main(){
string a[26]={".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
string b;
string d;
getline(cin,b);
int i=0;
while(getline(cin,b)){
int k=0;
b+=' ';
char c='@';
while(k<b.length()){
for(i=k;b[i]!=' ';i++){
d+=b[i];
}
k+=d.length();
k++;
for(int j=0;j<26;j++){
c++;
if(d==a[j])
cout << c;
}
c='@';
d.clear();
}
cout << endl;
}
}