给你两个长度为 n 的二进制字符串 s 和 t,以及三个 正整数 flipCost、swapCost 和 crossCost。
你可以对字符串 s 和 t 应用以下操作任意次(顺序不限):
i,翻转 s[i] 或 t[i](将 '0' 变为 '1' 或将 '1' 变为 '0')。此操作的成本为 flipCost。i 和 j,交换 s[i] 和 s[j] 或 t[i] 和 t[j]。此操作的成本为 swapCost。i,交换 s[i] 和 t[i]。此操作的成本为 crossCost。返回使字符串 s 和 t 相等所需的 最小总成本。
示例 1:
输入: s = "01000", t = "10111", flipCost = 10, swapCost = 2, crossCost = 2
输出: 16
解释:
我们可以执行以下操作:
s[0] 和 s[1](swapCost = 2)。操作后,s = "10000",t = "10111"。s[2] 和 t[2](crossCost = 2)。操作后,s = "10100",t = "10011"。s[2] 和 s[3](swapCost = 2)。操作后,s = "10010",t = "10011"。s[4](flipCost = 10)。操作后,s = t = "10011"。总成本为 2 + 2 + 2 + 10 = 16。
示例 2:
输入: s = "001", t = "110", flipCost = 2, swapCost = 100, crossCost = 100
输出: 6
解释:
翻转 s 的所有位即可使两个字符串相等,总成本为 3 * flipCost = 3 * 2 = 6。
示例 3:
输入: s = "1010", t = "1010", flipCost = 5, swapCost = 5, crossCost = 5
输出: 0
解释:
字符串已经相等,因此不需要任何操作。
提示:
n == s.length == t.length1 <= n <= 1051 <= flipCost, swapCost, crossCost <= 109s 和 t 仅由字符 '0' 和 '1' 组成。