电话: 邮箱:
诚 朴 雄 伟   励 学 敦 行 SINCERITY · SIMPLICITY · STRIVING · PRACTICE

买球投注资讯

买球投注资讯

买球投注平台 2026-05-14: 使二进制字符串相配的最小本钱。用go谈话, 给定两个

发布日期:2026-05-16 04:38 来源:未知 作者:admin 浏览次数:

买球投注平台 2026-05-14: 使二进制字符串相配的最小本钱。用go谈话, 给定两个

2026-05-14:使二进制字符串相配的最小本钱。用go谈话,给定两个长度为 n 的二进制字符串 s 和 t,以及三个正整数 flipCost、swapCost、crossCost。

你不错对 s、t 进行苟且屡次操作(操作王法不限),规画是让最终的 s 与 t 透澈疏通。

允许的操算作:

1. 翻转操作:任选一个位置 i,把 s[i] 或 t[i] 的比特取反(0 变 1,1 变 0)。该操作虚耗 flipCost。

2. 同串交换:任选两个不同位置 i、j,将 s[i] 与 s[j 对调,或将 t[i] 与 t[j 对调。该操作虚耗 swapCost。

3. 跨串交换:任选一个位置 i,交换 s[i] 与 t[i]。该操作虚耗 crossCost。

求:使 s 与 t 相配所需的最小总本钱。

n == s.length == t.length。

1

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。

题目来独力扣3800。

分步注视过程

第一步:统计中枢问题类型(最要害的一步)

咱们的规画是让s和t每一位都透澈疏通,领先要逐位对比两个字符串,统计统共不匹配的位置类型,这是统共野心的基础。

二进制字符只须0和1,两个字符串对位对比,只会出现4种情况:

1. s[i]=0,t[i]=0:透澈匹配,无需惩办

2. s[i]=1,t[i]=1:透澈匹配,无需惩办

3. s[i]=0,t[i]=1:界说为类型A不匹配(记总和量为a)

4. s[i]=1,t[i]=0:界说为类型B不匹配(记总和量为b)

代入输入示例统计

输入:s=01000,t=10111

逐位对比:

第0位:0 vs 1 → 类型A

第1位:1 vs 0 → 类型B

第2位:0 vs 1 → 类型A

第3位:0 vs 1 → 类型A

第4位:0 vs 1 → 类型A

最终统计甘休:

a=4(4个0→1不匹配),b=1(1个1→0不匹配)

为了浅显野心,咱们合伙让a ≤ b,颐养后:a=1,b=4

第二步:明确三种中枢诞生有接头(仅针对不匹配位)

统共不匹配的位置,只可通过翻转、同串交换、跨串交换三种操作诞生。

代码入网算了三种最优的组合有接头本钱,最终取最小值便是谜底。

有接头1:纯翻转操作(最毛糙的暴力有接头)

端正:对每一个不匹配的位置,买球投注平台单独试验翻转操作(改s或改t都不错),大阳城app注册下载(SuncityGroup)直到匹配。

• 总不匹配位数 = a + b

• 总本钱 = (a + b) × 翻转本钱

代入示例野心:

总不匹配位数=1+4=5,翻转本钱=10

总本钱=5×10=50

有接头2:同串交换 + 剩余翻转

端正:

1. 同串交换:只可诞生数目相配的类型A和类型B不匹配(交换后径直让两组位置都匹配),最多能交换a次(因为a≤b)

2. 剩余不匹配:交换后剩下的b-a个类型B不匹配,只可用翻转操作诞生

• 交换本钱 = a × 同串交换本钱

• 翻转本钱 = (b - a) × 翻转本钱

• 总本钱 = 交换本钱 + 翻转本钱

代入示例野心:

a=1,b=4,同串交换本钱=2,翻转本钱=10

交换本钱=1×2=2

翻转本钱=(4-1)×10=30

总本钱=2+30=32

有接头3:跨串交换 + 同串交换 + 剩余翻转(最优有接头,示例谜底开首)

端正:这是组合操作的最优解,专揽跨串交换惩办成对的不匹配,都集同串交换,临了惩办剩余单个不匹配:

1. 总不匹配对数:total = a + b

2. 成对惩办:用跨串交换+同串交换组合诞生total/2对不匹配

3. 剩余单个:要是总和量是奇数,临了剩1个不匹配,用翻转诞生

• 中枢本钱 = 成对数目×同串交换本钱 + 差值×跨串交换本钱

• 剩余本钱 = 奇数个时×翻转本钱

• 总本钱 = 中枢本钱 + 剩余本钱

代入示例野心:

total=5,成对数目=2,剩余1个;跨串本钱=2,同串本钱=2,翻转本钱=10

中枢本钱=2×2 + (2-1)×2 = 4+2=6

剩余本钱=1×10=10

总本钱=6+10=16

第三步:选取最小本钱

咱们得到三种有接头的本钱:

有接头1:50 → 有接头2:32 → 有接头3:16

最终最小本钱=16,和题目示例输出透澈一致。

补充:三种操作的作用融会(接济融会)

1. 翻转操作:全能操作,单个位置诞生,本钱固定

2. 同串交换:批量诞生一双不同类型的不匹配,比两次翻转更低廉

3. 跨串交换:对位交换s和t的字符,和解交换能高效惩办批量不匹配

时辰复杂度 & 突出空间复杂度

1. 时辰复杂度

• 中枢操作:逐位遍历一次字符串,统计不匹配类型,遍历长度为n

• 后续野心:都是固定次数的数学运算(常数时辰)

• 总时辰复杂度:O(n)

(线性时辰,惩办10万长度的字符串也能高效驱动)

2. 突出空间复杂度

• 仅使用了固定大小的变量:统计用的2×2数组、a/b/res1/res2/res3等变量

• 无论输入字符串长度n是几许,占用的突出空间都不会变化

• 总突出空间复杂度:O(1)

(常数空间,着实不占用突出内存)

回来

1. 中枢经过:统计不匹配类型 → 野心三种操作组合本钱 → 取最小值

2. 示例中通过「交换+跨串交换+翻转」的组合得到最低本钱16

3. 时辰复杂度O(n),空间复杂度O(1),完好适配题目最大数据畛域

Go完整代码如下:

package main

import (

"fmt"

)

func minimumCost(s, t string, flipCost, swapCost, crossCost int)int64 {

cnt := [2][2]int{}

for i, ch := range s {

cnt[ch&1][t[i]&1]++

}

a := cnt[0][1]

b := cnt[1][0]

if a > b {

a, b = b, a

}

res1 := (a + b) * flipCost

res2 := a*swapCost + (b-a)*flipCost

avg := (a + b) / 2

res3 := (avg-a)*crossCost + avg*swapCost + (a+b)%2*flipCost

returnint64(min(res1, res2, res3))

}

func main {

s := "01000"

t := "10111"

flipCost := 10

swapCost := 2

crossCost := 2

result := minimumCost(s, t, flipCost, swapCost, crossCost)

fmt.Println(result)

}

Python完整代码如下:

# -*-coding:utf-8-*-

def minimumCost(s: str, t: str, flipCost: int, swapCost: int, crossCost: int) -> int:

cnt = [[0, 0], [0, 0]]

for sc, tc in zip(s, t):

cnt[ord(sc) & 1][ord(tc) & 1] += 1

a = cnt[0][1]

b = cnt[1][0]

if a > b:

a, b = b, a

res1 = (a + b) * flipCost

res2 = a * swapCost + (b - a) * flipCost

avg = (a + b) // 2

res3 = (avg - a) * crossCost + avg * swapCost + (a + b) % 2 * flipCost

return min(res1, res2, res3)

if __name__ == "__main__":

s = "01000"

t = "10111"

flipCost = 10

swapCost = 2

crossCost = 2

result = minimumCost(s, t, flipCost, swapCost, crossCost)

print(result)

C++完整代码如下:

#include

#include

#include

#include

using namespace std;

long long minimumCost(string s, string t, int flipCost, int swapCost, int crossCost) {

int cnt[2][2] = {{0, 0}, {0, 0}};

for (size_t i = 0; i

cnt[s[i] & 1][t[i] & 1]++;

}

int a = cnt[0][1];

int b = cnt[1][0];

if (a > b) {

swap(a, b);

}

long long res1 = (a + b) * flipCost;

long long res2 = a * swapCost + (b - a) * flipCost;

int avg = (a + b) / 2;

long long res3 = (avg - a) * crossCost + avg * swapCost + (a + b) % 2 * flipCost;

return min({res1, res2, res3});

}

int main {

幸运5星彩app官方手机版

string s = "01000";

string t = "10111";

int flipCost = 10;

int swapCost = 2;

int crossCost = 2;

long long result = minimumCost(s, t, flipCost, swapCost, crossCost);

cout

return0;

}

咱们信服东说念主工智能为犀利东说念主提供了一种“增强器具”,并戮力于共享全方向的AI常识。在这里,您不错找到最新的AI科普著作、器具评测、提高甘休的逃匿以及行业瞻念察。

原宥关爱“福大大架构师逐日一题”,发音讯可得回口试费力买球投注平台,让AI助力您的改日发展。