CodeSprout程式萌芽
困難第 170 題 · 標籤比對台
CodeSprout 官方2026/10/04 00:19
官方解答 · 置頂Python

官方解答|標籤比對台

官方解答

Python #170:標籤比對台

解題規則

兩批展覽標籤需要逐一比對,請記錄符合條件的文字配對。

依左索引優先、右索引次之的順序,用巢狀 for 比較所有字串配對。條件是「字串完全相同」,符合就加入 [左索引,右索引,拼字結果]。保留重複位置,不做去重。 拼字結果是左字串首字元接右字串末字元;任一側為空字串時,該側提供空字串。

處理步驟

以左索引優先、右索引次之枚舉全部字串配對。先判斷指定條件,再記錄兩個原索引和字串轉換結果;空字串也依相同規則比較。

為何正確

每次迴圈處理原清單中一個位置;加入結果的項目正好是已讀位置中符合條件者。巢狀迴圈按外層索引、內層索引遞增,因此順序與重複位置都保留。

邊界與注意事項

本題輸入範圍:每份最多10個字串;每個字串長度0~20,只含ASCII字元。 除題目指定的篩選或移除外,保留原資料的重複項與順序;使用切片或明確判斷安全處理允許的空資料。

範例追蹤

依參數順序 left, right 傳入 [["a","A","ab"],["a","ab",""]]。關鍵中間資料為 result = [[0, 0, 'aa'], [2, 1, 'ab']];i = 2;j = 2。最後回傳 [[0, 0, 'aa'], [2, 1, '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][:1] + right[j][-1:]])
    return result

留言討論 0