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

JavaScriptで文字列内に2回出現する最初の文字のインデックスを取得する方法

はじめに

本記事では、JavaScriptで文字列を受け取り、その文字列の中で最初に2回出現する文字のインデックスを返す関数の作成方法を解説します。該当する文字が存在しない場合は -1 を返します。

アルゴリズムの考え方

この問題は Map オブジェクトを活用することで効率的に解決できます。文字列を先頭から順番に走査し、各文字がすでにMapに登録されているかを確認します。

  • 登録済みの場合: その文字の初回出現時のインデックスを即座に返します。
  • 未登録の場合: 現在の文字とそのインデックスをMapに保存します。

走査が終了しても該当する文字が見つからなければ -1 を返します。このアプローチの時間計算量は O(n) であり、非常に効率的です。

コード例

実際のコードは以下のとおりです。

const str = 'Hello world, how are you';
const firstRepeating = str => {
    const map = new Map();
    for(let i = 0; i < str.length; i++){
        if(map.has(str[i])){
            return map.get(str[i]);
        };
        map.set(str[i], i);
    };
    return -1;
};
console.log(firstRepeating(str));

実行結果

コンソールには以下の出力が表示されます。

2

処理の流れの解説

サンプル文字列 'Hello world, how are you' の場合、各文字を先頭から確認していきます。H(インデックス0)、e(インデックス1)は新規のためMapに登録され、次の l(インデックス2)も登録されます。そして次の l(インデックス3)の時点で、すでにMapに存在することが検出され、初回出現時のインデックスである「2」が返されます。

ポイントは、戻り値として返されるのは「繰り返しが検出された位置」ではなく「その文字が最初に出現した位置のインデックス」であるという点です。用途に応じて、検出時のインデックスを返すよう変更することも可能です。

  1. Pythonで文字列内の最初の繰り返し文字のインデックスを検索する方法

    文字列 s が与えられたとき、その中で最初に繰り返し出現する文字のインデックスを求める問題を考えてみましょう。繰り返し文字がひとつも存在しない場合は、-1 を返します。 例えば、入力が "abcade" の場合、出力は 3 になります。これは、文字 a がインデックス 3 の位置に再び現れているためです。 解法のアプローチ この問題を解くには、以下の手順に従います。 文字の出現履歴を記録するための辞書(マップ)chars を定義します。 i を 0 から文字列の長さまで順にループさせます。 s[i] がすでに chars に存在する場合、その時点のインデックス i を

  2. Pythonで最初の文字列の最小インデックスに存在する2番目の文字列の文字を検索する方法

    2つの文字列 str と patt があるとします。この課題では、str の中で最も小さいインデックス(先頭に近い位置)に現れる patt 内の文字を特定します。もし patt のどの文字も str に存在しない場合は、-1 を返します。 たとえば、入力が str = helloworld、patt = wor の場合、出力は o になります。これは w がインデックス 5、o がインデックス 4、r がインデックス 7 に存在しており、その中で最も小さいインデックスを持つのが o だからです。 アルゴリズムの手順 この問題は、次の手順で解くことができます。 外側のループで、変数 i を 0