本題敘述:
占卜籤筒有
M
支籤,每一支籤為一個由英文小寫字母組成的字串。從籤筒內抽出兩支籤,若將這兩支籤上的字串S
和T
連接起來形成的字串可以將該字串拆成左右兩半並且內容一樣,則抽到聖筊代表神明同意,否則神明不同意或是沒回答。例如抽出的兩支籤上的字串分別為 piep 和 ie,則相連接起來的字串為 piepie 可以拆分左右兩半為相同的字串 pie 和 pie,但抽出的兩支籤為 foo 和 bar 時則不滿足條件。 神奇的是,若抽到的兩支籤
S
和T
為聖筊,則不管是將T
接在S
後面或是順序反過來接起來,都可以是聖筊,再次說明了這兩支籤有著某種神秘力量在祝福著抽到的幸運人。例如 piep 和 ie 不管是使用 piepie 或是 iepiep 都可以拆分成兩個一樣的字串。詢問籤筒內這
M
支籤,有幾個 pair 可以形成聖筊。相同的兩支籤組合計算一次即可。
m = int(input())
c = set()
for _ in range(m):
c.add(input())
total = 0
for i in c:
for idx in range((len(i) - 1 )//2):
idx += 1
if i[:idx] == i[-idx:] and i[idx:-idx] in c:
total += 1
print(total)
i
,並檢查其兩端是否相同(通過索引idx
來檢查)。c
中,那麼這是一個有效的字串對。total
加1。最後,輸出total
的值,即符合條件的字串對數量。字串分割:
abyyyab
,我們需要檢查這個字串的兩端部分是否相同。這可以通過for迴圈字串的一半來完成,檢查每一部分的開頭和結尾是否相同:if i[:idx] == i[-idx:]
。使用set()搜尋:
set()
來儲存所有的字串。接下來,我們檢查去掉兩端相同部分之後的中間部分是否存在於這個集合中:if i[idx:-idx] in c
。這樣可以確保中間部分也是籤筒中的某個字串。本題知識: