題意描述:
舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字、以及壞掉的那些鍵,打出的結果文字會是怎樣?
輸入格式:
輸入在 2 行中分別給出壞掉的那些鍵、以及應該輸入的文字。其中對應英文本母的壞鍵以大寫給出;每段文字是不超過 10^5 個字元的串。可用的字元包括字母 [a-z, a-z
]、數字0-9
、以及下劃線_
(代表空格)、,
、.
、-
、+
(代表上檔鍵)。題目保證第 2 行輸入的文字串非空。
注意:如果上檔鍵壞掉了,那麼大寫的英文本母無法被打出。
輸出格式:
在一行中輸出能夠被打出的結果文字。如果沒有乙個字元能被打出,則輸出空行。
輸入樣例:
7+ie.
7_this_is_a_test.
輸出樣例:
_hs_s_a_tst
解題思路:
**:
def
main()
: string1 =
input()
string2 =
input()
#string1 儲存壞鍵,string2儲存待輸出的字串
not_working =
# 使用字典來儲存那些壞鍵,這樣在查詢的時候更快。
# python 列表中的 in 查詢要遍歷整個列表,所花時間為o(n),而字典使用了雜湊的原理,查詢時間為o(1)
for x in string1:
not_working.setdefault(x,
true
)# 我們使用壞鍵的字元 作為 字典的 key, 這樣可以直接用 some_key in dict 的形式查詢。
# 注意這裡setdefault的值可以是任何值而不僅僅是true
answer =
shangdang =
false
if'+'
in not_working else
true
# 如果 『+』 在字典中,說明上檔鍵壞了
# 我們為什麼要把上檔鍵的判斷提前求出來並存起來呢?因為後續待輸出的字串中可能有多個大寫字母都需要查詢上檔鍵是否可用。
# 將這些公共的操作提取出來並提前計算出來,然後再儲存起來。使用的時候直接使用這個變數 shangdang 的值就可以減少重複計算,加快速度。
for x in string2:
#對於待輸出字串中的每乙個
if isupper(x)
:# 如果是乙個大寫字母
ifnot x in not_working and shangdang:
# 該大寫字母對應的鍵沒有壞而且上檔鍵也沒有壞
answer.extend(x)
# 記起來,待會輸出。
else
:# 如果不是乙個大寫字母而是其他字元
ifnot x.upper(
)in not_working:
# 該字元所對應的鍵沒有壞
answer.extend(x)
print(''
.join(answer)
)# 輸出答案,''.join(answer)將answer中的字元拼接為乙個字串
defisupper
(char)
:# 判斷乙個字元是否是大寫字母
iford
(char)
<=
ord(
'z')
andord
(char)
>=
ord(
'a')
:return
true
else
:return
false
"""def isupper(char):
#判斷乙個字母是否是大寫字母
return char.upper() == char
"""if __name__ ==
'__main__'
: main(
)
易錯點:
只有大寫字母對應的鍵沒有壞而且上檔鍵也沒有壞的時候才輸出這個大寫字母。
壞鍵的字串中只有對應的大寫字母而沒有小寫字母。
總結:
1033 舊鍵盤打字
舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字 以及壞掉的那些鍵,打出的結果文字會是怎樣?輸入格式 輸入在2行中分別給出壞掉的那些鍵 以及應該輸入的文字。其中對應英文本母的壞鍵以大寫給出 每段文字是不超過105個字元的串。可用的字元包括字母 a z,a ...
1033 舊鍵盤打字
時間限制 200 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字 以及壞掉的那些鍵,打出的結果文字會是怎樣?輸入格式 輸入在2行中分別給出壞掉...
1033 舊鍵盤打字
原題描述 舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字 以及壞掉的那些鍵,打出的結果文字會是怎樣?輸入格式 輸入在2行中分別給出壞掉的那些鍵 以及應該輸入的文字。其中對應英文本母的壞鍵以大寫給出 每段文字是不超過105個字元的串。可用的字元包括字母 a...