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

【JavaScript】文字列内で最初に重複した文字のインデックスを返す方法

今回は、文字列を引数として受け取り、その中で最初に2回出現する文字(繰り返し文字)のインデックスを返すJavaScript関数を作成します。該当する文字が存在しない場合は -1 を返します。

処理の流れ

実装のポイントは次のとおりです。

  • 各文字とそのインデックスを Map オブジェクトに記録していきます。
  • ループ処理の中ですでに Map に登録済みの文字が出現した場合、その文字の最初の出現位置(インデックス)を即座に返します。
  • 最後まで重複する文字が見つからなければ -1 を返します。

対象となる文字列

今回使用する文字列は以下のとおりです。

const str = 'Hello world, how are you';

サンプルコード

実際のコードは以下のようになります。

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)、続いて l(インデックス2)が登場します。この l はインデックス3でもう一度出現するため、最初に繰り返された文字「l」の最初の出現位置である「2」が結果として返されます。

このように Map を活用することで、文字列を一度走査するだけで効率的に最初の重複文字を見つけることができます。計算量は O(n) となり、長い文字列でも高速に動作します。

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

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

  2. Pythonで文字列内の最初のユニーク文字を見つける方法

    文字列が与えられたとき、その中で最初に一度だけ出現する文字(ユニークな文字)を見つける問題を考えてみましょう。 例えば、文字列が people の場合、出現回数が1回である最初の文字は o です。この場合、そのインデックスである 2 を返します。もし該当する文字が文字列中に存在しない場合は、-1 を返します。 解法のアプローチ この問題は、以下の手順で効率的に解くことができます。 頻度マップ(辞書)を作成する 文字列内の各文字 c について処理を行う: c が頻度マップに存在しない場合は、キーとして追加し値を 1 に設定する すでに存在する場合は、そのカウントを +1 する 作成した頻