JavaScriptで文字列(スペースを含む)から2番目に出現頻度の高い文字を取得する方法
本記事では、スペースを含む文字列を受け取り、その中で2番目に多く出現する文字を返すJavaScript関数の作成方法を解説します。
基本的な考え方はシンプルです。まず各文字の出現回数をオブジェクトでカウントし、次に出現回数の降順で並べ替えて、その2番目の要素を取り出します。
実装コード
const str = 'Hello world, I have never seen such a beautiful weather in the world';
const secondFrequent = str => {
const map = {};
for(let i = 0; i < str.length; i++){
map[str[i]] = (map[str[i]] || 0) + 1;
};
const freqArr = Object.keys(map).map(el => [el, map[el]]);
freqArr.sort((a, b) => b[1] - a[1]);
return freqArr[1][0];
};
console.log(secondFrequent(str));
処理の流れ
- 出現回数の集計: 空のオブジェクト
mapを用意し、forループで文字列を1文字ずつ走査します。(map[str[i]] || 0) + 1という式によって、まだ登録されていない文字は1からカウントを開始し、既存の文字は前回の値に1を加算していきます。 - 配列への変換:
Object.keys()ですべての文字(キー)を取得し、map()を使って「[文字, 出現回数]」という形式の2次元配列に変換します。 - ソート:
sort()メソッドと比較関数(a, b) => b[1] - a[1]を組み合わせることで、出現回数の多い順(降順)に並べ替えます。 - 結果の取得: ソート後の配列のインデックス1(2番目)にある文字を返します。
出力結果
コンソールには以下のように表示されます。
e
この例では、文字列の中で最も多く出現するのはスペースであり、2番目に多いのが e です。そのため、関数は e を返します。
注意点
- 大文字と小文字は区別されます。区別せずにカウントしたい場合は、事前に
toLowerCase()などで文字列を正規化しておきましょう。 - 出現回数が同率の場合、ソート結果の順序は実行環境に依存します。厳密な順位が必要な場合は、タイブレーク用のロジックを追加すると安全です。
- 文字列に含まれる文字の種類が2種類未満の場合、
freqArr[1]はundefinedになりエラーが発生するため、実際のアプリケーションではエラーハンドリングを検討してください。
-
JavaScriptで文字列からすべてのスペースを削除する方法
問題JavaScriptで、文字列を受け取り、その文字列に含まれるすべての半角スペースを取り除いた新しい文字列を返す関数を作成します。たとえば、単語の間や文字の間に入っている余分なスペースがすべて削除され、連続した文字列だけが残るイメージです。実装例:ループ処理を使う方法まずは基本的なアプローチとして、forループで文字列を1文字ずつ確認し、スペース以外の文字だけを結果に連結していく方法を見てみましょう。const str = some random string ex a m pl e; const removeSpaces = (str = ) => { l
-
C++で文字列内の2番目に頻度の高い文字を見つけるプログラム
この問題では、文字列 str が与えられます。私たちの課題は、C++で文字列内に2番目に出現頻度が高い文字を見つけるプログラムを作成することです。入力例で問題を理解しよう入力str = abaacabcba出力bこの例では、文字 a が5回、b が3回、c が2回出現しています。最も頻度が高いのは a なので、2番目に頻度の高い文字である b が出力されます。解決アプローチ文字列の中で2番目に頻度の高い文字を見つけるには、以下の手順を実行します。まず、各文字の出現回数を格納するためのカウント配列(charFreq)を用意します。文字列を1文字ずつ走査しながら、対応する配列要素のカウントを増やし