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

JavaScriptで文字列内の2番目に頻度の高い文字を取得する方法

はじめに

JavaScriptでは、文字列を受け取り、その中で2番目に出現回数が多い文字を返す関数を実装することがあります。本記事では、その具体的な実装方法をサンプルコード付きで解説します。

例として、次のような文字列を考えてみましょう。

const str = 'This string will be used to calculate frequency';

この場合、最も多く出現する文字の次に多い、つまり2番目に頻度の高い文字は「e」です。実際にこれを取得するコードを見ていきましょう。

実装例

以下が完全なコードです。

const str = 'This string will be used to calculate frequency';
const secondMostFrequent = str => {
    const strArr = str.split('');
    const map = strArr.reduce((acc, val) => {
        if(acc.has(val)){
            acc.set(val, acc.get(val) + 1);
        }else{
            acc.set(val, 1);
        }
        return acc;
    }, new Map);
    const frequencyArray = Array.from(map);
    return frequencyArray.sort((a, b) => {
        return b[1] - a[1];
    })[1][0];
};
console.log(secondMostFrequent(str));

出力結果

このコードを実行すると、コンソールには次のように出力されます。

e

コードの解説

ここでは、処理の流れを順番に見ていきましょう。

  1. 文字列の分割str.split('') を使って、文字列を1文字ずつの要素を持つ配列に変換します。
  2. 出現回数の集計reduce() メソッドと Map オブジェクトを組み合わせて、各文字の出現回数をカウントします。has() でキーの存在を確認し、既に存在すれば get() で値を取得して +1、存在しなければ新しく 1 を設定します。
  3. 配列への変換Array.from(map)Map を [文字, 出現回数] のペアを持つ配列に変換します。
  4. 降順ソートsort() メソッドを使い、出現回数の多い順に並べ替えます。
  5. 2番目の要素を取得:ソート後の配列のインデックス 1(2番目)から文字を取り出して返します。

このように、Map による頻度集計とソートを組み合わせることで、シンプルかつ効率的に2番目に多い文字を求めることができます。同様の手法は「上位N件の頻出文字」や「最頻値の抽出」など、さまざまな場面に応用できますので、ぜひ活用してみてください。

  1. C++で文字列内の2番目に頻度の高い文字を見つけるプログラム

    この問題では、文字列 str が与えられます。私たちの課題は、C++で文字列内に2番目に出現頻度が高い文字を見つけるプログラムを作成することです。入力例で問題を理解しよう入力str = abaacabcba出力bこの例では、文字 a が5回、b が3回、c が2回出現しています。最も頻度が高いのは a なので、2番目に頻度の高い文字である b が出力されます。解決アプローチ文字列の中で2番目に頻度の高い文字を見つけるには、以下の手順を実行します。まず、各文字の出現回数を格納するためのカウント配列(charFreq)を用意します。文字列を1文字ずつ走査しながら、対応する配列要素のカウントを増やし

  2. 【Python入門】文字列内で最も頻繁に出現する文字を検索する方法

    文字列の中で最も多く出現する文字を検索したい場合、空の辞書(dict)を作成し、文字列の各要素を順番に走査するのが基本的なアプローチです。辞書内にその文字がすでに存在していればカウントを1つ増やし、存在しなければ新たに1を登録します。最後に、辞書内の値の最大値を求めて変数に格納することで、最頻出文字を特定できます。 サンプルコード 以下に具体的な実装例を示します。 my_string = Python-Interpreter print(The string is : ) print(my_string) max_frequency = {} for i in my_string: