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 浏览次数

启动您的 职业

完成课程即可获得认证

开始使用
广告