題目連結:
題目大意:
給定一個 LED 顯示器的各個線條之編號如下:
並再給定各個大寫英文字母於 LED 顯示器的樣式:
輸入有多列,每列給定一字串,其可能包含大寫英文字母、空白字元或是數字。字串中的數字即代表著上述的編碼之一(不過,當有「0」不屬於任何正確的編碼時即代表著空白字元)。
請將數字解碼後的字串輸出(保證給定的編碼都可以解碼,即編碼都是正確的)。
範例輸入:
HELL1235670WO1234591561580
PROGRAMMING037124670C123567123567156
AND MORE037124903735790278134573712467045612356735792781245612467278
範例輸出:
HELLO WORLD
PROGRAMMING IS COOL
AND MORE IF IN THIS CONTEST
解題思維:
建表。對,就是把 26 個大寫字母與其對應編碼建立成一個表格以供查詢。
雖然原題的敘述有寫編碼不會混淆,但是實際上有著類似以下測資:
01580
再加上沒有說編碼是否按照特定順序給定。所以上面的編碼可以被解讀為
'D' + ' ' 或是 ' ' + 'D'
而上述於本題中的「答案」是後者。
所以本題的編碼依舊有一定的順序——如果一個字母的編碼有著「0」則他會在該編碼的結尾。
因此當我們掃過字串時,遇到非數字字元就輸出,而遇到數字時就一位一位加進當前的編碼(除了「0」比較特別,需要存在別的地方)。
當目前編碼可以出現於表中時就輸出對應的字元;反之就看有沒有「0」,有就加進編碼裡找找看,有的話就輸出。當「0」出現,但是目前編碼為空時,根據上面的觀察,這個「0」一定代表空白因此輸出空白字元。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。