Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

JavaScriptを使用してバイナリ文字列の最小フリップを見つける


単調に増加する文字列:

「0」と「1」の文字列は、いくつかの「0」(場合によっては0)と、それに続くいくつかの「1」(場合によっては0)で構成される場合、単調に増加します。

問題

最初で唯一の引数としてバイナリ文字列strを受け取るJavaScript関数を作成する必要があります。

文字列に存在する任意の「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

  1. JavaScriptを使用して、別の文字列内の文字の最長連続出現を検索する

    問題 最初の引数として文字列を取り、2番目の引数として単一の文字を受け取るJavaScript関数を作成する必要があります。 この関数は、文字列内の文字の最長連続出現をカウントして返す必要があります。 例 以下はコードです- const str = 'abcdaaadse'; const char = 'a'; const countChars = (str = '', char = '') => {    const arr = str.split('');   &nbs

  2. JavaScriptを使用して10進値が偶数のバイナリ文字列を並べ替える

    問題 長さ3のバイナリ文字列をすべてスペースで区切った文字列を取り込むJavaScript関数を作成する必要があります。 この関数は、数値を昇順で並べ替える必要がありますが、偶数を並べ替え、すべての奇数をそのまま残します。 例 以下はコードです- const str = '101 111 100 001 010'; const sortEvenIncreasing = (str = '') => {    const sorter = (a, b) => {       const findIn