一、问题

二、问题分析
这问题跟之前交换二进制字符串挺像的,刚开始想当然以为类型二和那个问题一样,结果后来仔细一看这道题要比那道的操作步骤简单多了。
问题抽象化:我们将字符串设为[1...n],现在的问题是求出这个字符串的最少变更次数。而第一步操作可以描述为:从[1...n]中选取[1...k]附加到[k+1...n]后面,即[k+1...n,1...k],我们发现中间部位[k+1...n]是不变的,而只有[1...k]的整体变动,然而这[1...k]的变动对[1...k]的转换次数并不会产生影响,为什么呢?
首先,对于交替,我们有两种情况:[01.....],[10......]。
其次,[k+1...n]有上面两种情况,[1...k]也有上面两种情况,然而当[1...k]移到[k+1...n]之后时,[1...k]的交替情况就会受到[k+1...n]的影响,也就是产生笛卡尔积,变成四种情况了。
最后,假设[k+1...n]单个的反转次数分别为:n1,n2分别对应[01......],[10......],[1...k]单个的反转次数分别为:k1,k2。则二者组合可能产生的次数为:n1+k1, n1+k2, n2+k1, n2+k2
而两者组合反转次数最少的就是min(n1+k1, n1+k2, n2+k1, n2+k2)
我们只需将每个元素遍历一次即可得到整个字符串的最小反转次数。
三、代码实现:
var minFlips = function(s) {
let len = s.length;
let mixs = new Array(len);
//mixs.fill([0,0]);
//注意这里用fill这样会导致之后的每个用

该博客讨论了一个关于二进制字符串的问题,探讨如何在保持字符串交替的同时,通过最少的反转次数达到目标。博主分析了问题的关键在于[1...k]部分的反转对整体反转次数的影响,并解释了如何计算最小反转次数。最后,博主提供了代码实现来解决这个问题。

895

被折叠的 条评论
为什么被折叠?



