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

JavaScriptで隣接する同一単語のペアを数える方法

問題概要

英文の文章を表す文字列 str を引数として受け取るJavaScript関数を作成します。

この関数の目的は、文字列の中で隣り合って登場する同じ単語のペアがいくつあるかを数え、その個数を返すことです。比較の際には大文字と小文字を区別しないため、itIt は同一の単語としてカウントされます。

入力例

const str = 'This this is a a sample string';

出力例

const output = 2;

出力の説明

文中の This thisa a の2箇所で同じ単語が連続して現れているため、結果は 2 となります。


実装コード

以下が実際のコード例です。

const str = 'This this is a a sample string';

const countIdentical = (str = '') => {
  const arr = str.split(' ');
  let count = 0;
  for(let i = 0; i < arr.length - 1; i++){
    const curr = arr[i];
    const next = arr[i + 1];
    if(curr.toLowerCase() === next.toLowerCase()){
      count++;
    }
  }
  return count;
};

console.log(countIdentical(str));

実行結果

2

コードの解説

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

1. 文字列の分割: str.split(' ') を使って、文章をスペースで区切り、単語の配列に変換します。上記の例では ['This', 'this', 'is', 'a', 'a', 'sample', 'string'] が生成されます。

2. 隣接単語の比較: forループで配列を先頭から走査し、現在の単語 arr[i] とその直後の単語 arr[i + 1] を順に取り出します。ループの上限が arr.length - 1 になっている点がポイントで、これにより配列の範囲外を参照するエラーを防ぎます。

3. 大文字小文字の統一: 比較の前に toLowerCase() で両方の単語を小文字に揃えることで、「This」と「this」のような表記の揺れも同一の単語として正しく判定できます。

4. カウントと返却: 単語が一致していればカウンターを1つ増やし、ループ完了後に合計値を返します。

このアルゴリズムの計算量は、単語数を n とすると O(n) であり、一度の走査で処理が完結するため非常に効率的です。長いテキストに対しても高速に動作します。

  1. JavaScriptでテキスト内の出現回数上位3つの単語を抽出する方法

    課題英語のアルファベット文字列を引数として受け取るJavaScript関数を作成します。この関数は、文字列内に含まれる単語のうち、出現回数が多い上位3つの単語を返す必要があります。解決のアプローチ実装の手順は以下の通りです。1. 正規表現を使って記号やアンダースコアなどの不要な文字を除去し、連続する空白を1つにまとめます。2. 文字列をすべて小文字に変換してから、スペース区切りで配列に分割します。3. オブジェクト(マップ)を使って各単語の出現回数をカウントします。4. 出現回数の降順にソートし、上位3つの単語を返します。コード例以下が実際のコードです。 b[1] - a[1]);  

  2. JavaScriptで反対方向の移動を相殺して最終的な進行方向を求める方法

    問題単一文字の配列 arr を引数として受け取り、配列全体の移動を処理した後に残る最終的な進行方向を返すJavaScript関数を作成する必要があります。配列に含められるのは、次の4種類の文字のみです。N → 北(North)方向への移動S → 南(South)方向への移動W → 西(West)方向への移動E → 東(East)方向への移動各文字は、その方向へ単位距離だけ移動することを表します。そして、配列内のどこかで反対同士の方向(S と N、または E と W)が隣接して現れた場合、それらは互いの移動を打ち消し合います。したがって、この関数の役割は、すべての打ち消しを適用した結果として残る