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

JavaScriptで重複する文字の出現を1回に制限する


問題

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

関数は、入力文字列に基づいて新しい文字列を準備する必要があります。この文字列では、各文字の外観が1つだけ保持され、保持される文字は、結果の文字列を辞書式順序で最小にする文字列です。

たとえば、関数への入力が-

の場合
const str = 'cbacdcbc';

その場合、出力は-

になります。
const output = 'acdb';

出力の説明:

文字列から「c」の出現箇所を削除することもできますが、最初の文字列を削除したため、「a」と「b」の場合、文字列は辞書式順序で最小で同じになります。

このためのコードは-

になります
const str = 'cbacdcbc';
const removeDuplicates = (str = '') => {
   if (str.length <= 1) {
      return str;
   };
   let flag;
   let string = "";
   let legend = new Array(26).fill(-1 let last = "z";
   let ind = 0;
   for (let i = str.length - 1; i > -1; i--) {
      const element = str[i];
      if (legend[element.charCodeAt() - 97] < 0) {
         legend[element.charCodeAt() - 97] = i;
         last = element;
         ind = i;
         string += element;
      } else {
         if (last >= element) {
            last = element;
            ind = i;
         }
      }
   }
   let finalStr = last;
   while (string.length > finalStr.length) {
      legend.fill(-1);
      for (let i = str.length - 1; i > ind; i--) {
         const element = str[i];
         if (finalStr.indexOf(element) < 0) {
            if (legend[element.charCodeAt() - 97] < 0) {
               legend[element.charCodeAt() - 97] = i;
               last = element;
               flag = i;
            } else {
               if (last >= element) {
                  last = element;
                  flag = i;
               }
            }
         }
      }
      ind = flag;
      finalStr += last;
   }
   return finalStr;
};
console.log(removeDuplicates(str));

コードの説明:

ここでの考え方は-

初めて、文字列全体をループして、使用されている文字を確認し、すべての文字を含む最小の開始文字のサブ文字列を見つけます。

これは、ループを右から左に開始し、部分文字列の開始位置と最初の最小文字を記憶すると、理解しやすくなります。

次に、部分文字列を(最初の最小文字なしで)右から左にループし始めますが、今回は、すでに保存されている文字を無視する必要があります。

出力

そして、コンソールの出力は-

になります
acdb

  1. JavaScriptの文字頻度に基づく文字列のエンコード

    問題 最初で唯一の引数として文字列strを受け取るJavaScript関数を作成する必要があります。 この関数は、入力文字列に基づいて新しい文字列を作成する必要があります。新しい文字列の各文字は、元の文字列に1回だけ出現する場合は「(」、元の文字列に複数回出現する場合は「)」です。 そして、capitaliを無視する必要があります たとえば、関数への入力が-の場合 入力 const str = 'Success'; 出力 const output = ')())())'; 例 以下はコードです- const str = 'Succes

  2. JavaScriptで要素の出現をn回に制限する

    問題 最初の引数として重複を含む可能性のある整数の配列arrと、2番目の最後の引数として数値numを受け取るJavaScript関数を作成する必要があります。 この関数のタスクは、配列を反復処理し、配列にn回以上出現する数値が存在するかどうかを確認することです。 そのような要素が存在する場合は、その余分な出現を削除して、出現を最大数に制限する必要があります。 たとえば、関数への入力が-の場合 入力 const arr = [4, 1, 3, 1, 4, 1, 3, 4, 2]; const num = 2; 出力 const output = [4, 1, 3, 1, 4, 3