Python 中的 DI 字串匹配


假設我們有一個只包含 "I"(表示增加)或 "D"(表示減少)的字串 S,令 N = S 的長度。我們需要返回 [0, 1, ..., N] 的任意排列 A,使得對於 0, ..., N-1 − 範圍內的所有 i

  • 如果 S[i] 為 "I",則 A[i] < A[i+1]
  • 否則當 S[i] 為 "D" 時,則 A[i] > A[i+1]

所以,如果輸入為 "IDID",則輸出將為 [0,4,1,3,2]

為了解決這個問題,我們將執行以下步驟 −

  • A := 一個從 0 到 N 的列表,其中 N 是 S 的長度。
  • res = 一個空列表
  • 對於 S 中的每個元素 j,執行
    • 如果 j 為 I,則從 A 中刪除最後一個元素並插入到 res 中
    • 否則從 A 中刪除第一個元素並插入到 res 中
  • 返回 res

讓我們看看以下實現來更好地理解 −

示例

 即時演示

class Solution:
   def diStringMatch(self, S):
      A=[i for i in range(len(S)+1)]
   return [A.pop((j=='I')-1) for j in S]+A
ob = Solution()
print(ob.diStringMatch("IDID"))

輸入

"IDID"

輸出

[0, 4, 1, 3, 2]

更新日期: 06-Jul-2020

222 瀏覽次數

啟動您的 職業

完成課程即可獲得認證

開始使用
廣告
© . All rights reserved.