JavaScriptで文字列内の特定文字の最大連続出現回数を求める方法
本記事では、JavaScriptを使って「文字列の中である1文字が連続して出現する最大回数」を求める方法を解説します。アルゴリズムの考え方から実際のコード、実行結果まで、初心者にもわかりやすく説明していきます。
問題
次のようなJavaScript関数を作成することを目標とします。
- 第1引数として文字列を受け取る
- 第2引数として1文字を受け取る
- その文字が文字列内で連続して出現した最長の回数を数え、返す
コード例
以下がその実装コードです。
const str = 'abcdaaadse';
const char = 'a';
const countChars = (str = '', char = '') => {
const arr = str.split('');
let c = 0, max = 0;
for (let i = 0; i < arr.length; i++){
if(arr[i] === char){
c += 1;
if(c > max){
max = c;
};
}else{
if(c > max){
max = c;
};
c = 0;
};
};
return max;
};
console.log(countChars(str, char));
出力
3
コードの解説
このコードの処理の流れを順番に見ていきましょう。
- split('')メソッド:文字列を1文字ずつに分解し、配列に変換します。これにより各文字を個別に扱えるようになります。
- カウンター変数c:現在走査中の位置での連続出現回数を記録します。
- 最大値変数max:これまでに確認した中で最も長かった連続出現回数を保持します。
- ループ処理:各文字を対象の文字と比較し、一致すれば
cをインクリメントします。一致しなかった場合は、その時点でmaxを更新してからcをリセット(0に戻す)します。 - 戻り値:ループ完了後、最終的な
maxを返します。
今回の例では、文字列 'abcdaaadse' の中に 'aaa' という部分があり、'a' が3回連続して出現しています。そのため、実行結果は 3 となります。
まとめ
このアルゴリズムは、文字列を一度だけ走査すればよいため、計算量はO(n)と非常に効率的です。ログ解析やテキスト処理など、連続パターンを検出したいさまざまな場面で応用できる基本的かつ実用的なテクニックです。
-
JavaScriptでバイナリ文字列を単調増加にするための最小反転回数を求める方法
単調増加文字列とは0と1のみで構成される文字列が「単調増加」とみなされるのは、任意の個数(0個でも可)の0が先頭に並び、その後に任意の個数(これも0個でも可)の1が続く場合です。つまり、「000111」「0011」「1」などは単調増加ですが、「1100」「010」などは該当しません。問題の概要本記事では、バイナリ文字列 str を唯一の引数として受け取るJavaScript関数を作成します。文字列内の任意の0を1へ、または任意の1を0へと反転(フリップ)することができます。このとき、文字列全体を単調増加にするために必要な最小の反転回数を求めて返すのが目標です。入力例const str = 00
-
JavaScriptで最長のペアチェーンを見つける方法
問題数値ペア(組)の配列 arr を唯一の引数として受け取り、形成可能な最長チェーンの長さを返す JavaScript 関数を作成します。各ペアにおいて、最初の数値は必ず 2 番目の数値より小さいものとします。ここで、ペア (c, d) が別のペア (a, b) の後に続けられるのは、b < c が成り立つ場合に限られると定義します。このルールに従ってペアの連鎖(チェーン)を形成することができ、本関数はその中で最も長いチェーンの長さを求める必要があります。入力例const arr = [ [1, 2], [2, 3], [3, 4] ];出