Python程序查找二进制字符串中删除10或01可获得的最大分数

假设我们有一个二进制字符串s和两个值zero_one和one_zero。现在让我们考虑一个操作,在该操作中我们可以删除任何子字符串“ 01”并获得zero_one点。或者,我们可以删除任何子字符串“ 10”并获得one_zero点。我们必须找到在进行任意数量的操作后可以获得的最大点数。

因此,如果输入类似于s =“ 10100101” zero_one = 3 one_zero = 2,则输出将为11,因为我们可以删除3次“ 01”以获得3 * 3 = 9点。然后剩下的字符串是10。通过删除该字符串,我们可以再获得2分,所以总分是11。

范例(Python)

让我们看下面的实现以更好地理解-

class Solution:
   def solve(self, S, zero_one, one_zero):
      A = list(map(int, S))
      if zero_one < one_zero:
         zero_one, one_zero = one_zero, zero_one
         for i in range(len(A)):
            A[i] ^= 1
         ans = 0
         stack = []
         for x in A:
            if stack and stack[-1] < x:
               stack.pop()
               ans += zero_one
            else:
               stack.append(x)
         ans += one_zero * min(stack.count(0), stack.count(1))
         return ans
ob = Solution()
s = "10100101"
zero_one = 3
one_zero = 2
print(ob.solve(s, zero_one, one_zero))

输入值

"10100101", 3, 2
输出结果
11