使用 JavaScript 寻找二进制字符串中的最小翻转次数


单调递增字符串

一个只包含『0』和『1』的字符串是单调递增的,前提是它由一些(可能为 0)个『0』和一些(可能为 0)个『1』组成。

问题

我们需要编写一个 JavaScript 函数,它以二进制字符串 str 作为第一个也是唯一的参数。

我们可以将字符串中任何『0』翻转为『1』或将任何『1』翻转为『0』。我们的函数应该返回使 S 单调递增所需的最小翻转次数。

例如,如果输入函数的内容为

输入

const str = '00110';

输出

const output = 1;

输出说明

因为如果我们将最后一个『0』翻转为『1』,剩下的字符串就是『00111』。

示例

 动态演示

const str = '00110';
const countFlips = (str = '') => {
   const map = {}
   const helper = (index, prev) => {
      map[index] = map[index] || {}
      if (map[index][prev] !== undefined) {
         return map[index][prev]
      }
      if (index >= str.length) {
         return 0
      }
      if (prev === '0') {
         if (str[index] === '0') {
            map[index][prev] = Math.min(helper(index + 1, '0'), helper(index + 1, '1') + 1)
      } else {
         map[index][prev] = Math.min(helper(index + 1, '1'), helper(index + 1, '0') + 1)
      }
      } else if (str[index] === '0') {
         map[index][prev] = helper(index + 1, '1') + 1
      } else {
         map[index][prev] = helper(index + 1, '1')
      }
         return map[index][prev]
      }
   return helper(0, '0')
};
console.log(countFlips(str));

输出

1

更新时间:2021-04-23

146 次浏览

事业起航

完成课程获得认证

开始学习
广告