官方解答 · 置頂Python
官方解答|標籤比對台
官方解答
Python #155:標籤比對台
解題規則
兩批展覽標籤需要逐一比對,請記錄符合條件的文字配對。
依左索引優先、右索引次之的順序,用巢狀 for 比較所有字串配對。條件是「字串完全相同」,符合就加入 [左索引,右索引,兩字串用斜線隔開]。保留重複位置,不做去重。
處理步驟
以左索引優先、右索引次之枚舉全部字串配對。先判斷指定條件,再記錄兩個原索引和字串轉換結果;空字串也依相同規則比較。
為何正確
每次迴圈處理原清單中一個位置;加入結果的項目正好是已讀位置中符合條件者。巢狀迴圈按外層索引、內層索引遞增,因此順序與重複位置都保留。
邊界與注意事項
本題輸入範圍:每份最多10個字串;每個字串長度0~20,只含ASCII字元。 除題目指定的篩選或移除外,保留原資料的重複項與順序;使用切片或明確判斷安全處理允許的空資料。
範例追蹤
依參數順序 left, right 傳入 [["a","A","ab"],["a","ab",""]]。關鍵中間資料為 result = [[0, 0, 'a/a'], [2, 1, 'ab/ab']];i = 2;j = 2。最後回傳 [[0, 0, 'a/a'], [2, 1, 'ab/ab']]。結果由 return 回傳,不使用 print。
複雜度
設左右清單長度為 n、m,最大字串長度為 L;子字串搜尋最壞需要 O(L²),故最壞時間 O(nmL²),其餘逐字比較與轉換為 O(nmL),結果空間最壞 O(nmL)。
CodeSprout 官方解答 · 題意分析、解題步驟與完整參考程式
def solve(left, right):
result = []
for i in range(len(left)):
for j in range(len(right)):
if left[i] == right[j]:
result.append([i, j, left[i] + '/' + right[j]])
return result
留言討論 0
登入 後就能留言,一起討論不同的寫法。