0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JavaScriptで最頻出の文字を抽出・カウントする方法

Last updated at Posted at 2025-02-15

JavaScriptで最頻出の文字を抽出する方法。例によってmosyaの復習です。

問題

与えられた文字列に対して、最も頻繁に出現する文字とその回数を返す
関数 findMostFrequentChar を実装してください。
返り値は、以下のようなオブジェクトとして返してください。

{ char: 'a', count: 2 }

入力例:

findMostFrequentChar("abca");

出力例:

{ char: 'a', count: 2 }

ただし、もし出現回数が同じ文字が複数ある場合は、最初に出現した文字を返してください。

前提知識

for...of ループ

for (let 変数 of イテラブルオブジェクト) {
    // 繰り返し処理
}

イテラブルオブジェクト(配列、文字列など)から1つずつ取り出して変数に代入し、ループ処理を回すことができる。インデックス(i=1...)を使わないでより直感的に理解しやすいため、今回はこれを使う。

オブジェクトと配列の違い

  • オブジェクト
    キーと値がセットで格納されている。
    キーは 1.ドット記法 2.ブラケット記法 の2パターンで設定できる。
    変数をキーとして使いたいときは、ブラケット記法を使う必要がある。
    値に配列をいれることも可能
let obj = {name: "hanako", age: 25};
console.log(obj.name); // hanako

// キーに変数を設定する
const array = {};
let key = "キーです";
array[key] = "値です";
console.log(array); // {キーです: '値です'}
  • 配列
    要素を順番付けして格納する。
const array = ["banana", "apple", "mikan"];
console.log(array[1]); // apple

考え方

  • 与えられた文字は一文字ずつに分解してループを回す
  • 文字とその数を保存しておくオブジェクトが必要
  • ループの中で最頻出の文字と番号を毎回更新する必要がある

解答例

function findMostFrequentChar(str) {

  const obj = {}; // 文字をインデックスに個数をカウント
  let maxCharacter = ''; // 最頻出の文字を格納する用
  var maxNumber = 0; // 最大値をカウントして格納する用
  for (let maxChar of str){
    if(!obj[maxChar]){
      obj[maxChar] = 0;
    }
    obj[maxChar] += 1;
    if(maxNumber < obj[maxChar]){
      maxCharacter = maxChar;
      maxNumber = obj[maxChar];
    }
  }
  return { char:maxCharacter, count:maxNumber };
}

console.log(findMostFrequentChar("abca")); // { char: 'a', count: 2 }

所感

最初は一文もコードが思いつかず、半泣きになった問題。
けれどもChatGPT先生にしつこく質問して、自力で解けたのでめちゃくちゃうれしかったです。

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?