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

JavaScriptで配列内の唯一の異なる文字列を見つける方法


問題

文字列の配列を受け取るJavaScript関数を作成する必要があります。配列内のすべての文字列は同じ文字(またはその並べ替え)で構成されていますが、ただ1つの文字列だけが異なる文字セットを含んでいます。この関数の目的は、その唯一の文字列を見つけ出して返すことです。

例:

次のような配列が与えられたとします。

['ba', 'abc', 'acb', 'bac', 'foo', 'bca', 'cab', 'cba']

この場合、求めるべき文字列は「foo」です。

文字列には空白が含まれることがありますが、空白自体は意味を持たず、空白以外の記号のみが判定の対象となります。たとえば、空白だけで構成された文字列は空文字列と同等に扱います。なお、配列には必ず3つ以上の文字列が含まれることが保証されています。

解決コード

以下はこの問題を解くためのコード例です。

const arr = ['ba', 'abc', 'acb', 'bac', 'foo', 'bca', 'cab', 'cba'];
const findOnlyUnique = (arr = []) => {
    const first = [];
    for(i = 0; i < arr.length; i++){
        first.push(arr[i].toLowerCase().replace(/\s/g, '').split(''));
        for (j = 0; j < arr[i].length; j++){
            first[i].sort();
        }
    }
    const second = [];
    for (k = 0; k < arr.length; k++){
        second.push(first[k].join());
    }
    second.sort();
    const third = [];
    if (second[1] !== second[second.length - 1]) {
        third.push(second[second.length - 1]);
    }else{
        third.push(second[0]);
    }
    const last = [];
    for(let n = 0; n < first.length; n++){
        last.push(first[n].join(','));
    }
    return (arr[last.indexOf(third[0])]);
};
console.log(findOnlyUnique(arr));

出力結果

foo

コードの解説

この関数の処理の流れを順番に見ていきましょう。

  1. 正規化: 各文字列を小文字に変換し、正規表現 /\s/g を使って空白をすべて除去します。その後、split('') で1文字ずつ配列に分解します。
  2. ソート: 文字の配列をソートすることで、元の並び順に関係なく、同じ文字セットを持つ文字列はすべて同一の形式に変換されます。
  3. 比較用の文字列生成: join() メソッドでソート済みの文字配列を連結し、比較可能な文字列を作成します。
  4. 異常値の特定: 正規化した文字列をさらにソートすると、同じ文字セットを持つ要素は互いに隣り合い、唯一の異なる文字列は配列の先頭か末尾に現れます。second[1] と末尾の要素を比較することで、どちらが異常値かを判定できます。
  5. 元の文字列の返却: 最後に、判定した文字列と一致するインデックスを元の配列から探し、対応する元の文字列を返します。

このアプローチにより、文字の並び順が異なるアナグラム同士を正しく同一視しながら、唯一の異なる文字列を効率的に特定することができます。

  1. JavaScriptで配列要素をそのインデックスでべき乗した値に変換する方法

    問題 数値の配列を受け取るJavaScript関数を作成する必要があります。この関数は、入力配列の各要素を、その要素の位置を示す0始まりのインデックスでべき乗し、新しい配列へと変換します。そして最終的に、この新しい配列を返します。 例えば、インデックス0にある要素は0乗(常に1)、インデックス3にある要素は3乗、というように各要素が処理されます。 実装のポイント ループで配列を走査しながら、各要素とそのインデックスを同時に取得する Math.pow() を使って「要素 ^ インデックス」を計算する 計算結果を結果配列の同じ位置に格納する なお、モダンなJavaScriptでは Math

  2. 【JavaScript】配列内で最も頻出する単語を上位N件抽出する方法

    問題概要英小文字のみで構成された文字列の配列 arr を第一引数として受け取り、数値 num(num は配列の長さより小さい値)を第二引数として受け取る JavaScript 関数を作成します。この関数は、配列 arr 内で最も頻出する要素を上位 num 件返す必要があります。結果は出現回数が多い順に並べます。また、出現回数が同じ単語が複数ある場合は、辞書順(アルファベット順)で先に来る単語を優先して並べます。入力例const arr = [the, day, is, sunny, the, the, the, sunny, is, is]; const num = 4;出力例const ou