JavaScriptで文字列配列の各要素について、アルファベット上の位置と一致する文字数を数える方法
問題の概要
英語の小文字アルファベットのみで構成された文字列の配列を受け取るJavaScript関数を作成することを考えます。
この関数は、入力配列を新しい配列へとマッピングします。新しい配列の各要素は、元の文字列において「その文字の1始まりのインデックス(位置)」と「英語アルファベットにおける同じ文字の1始まりのインデックス」が一致している文字の個数を表します。
たとえば、文字列「akcle」の場合、このカウントは 3 になります。これは、「a」「c」「e」の3文字が、文字列内でも1番目・3番目・5番目に位置し、アルファベット上でもそれぞれ1番目(a)、3番目(c)、5番目(e)に位置しているためです。
実装例
以下に、この問題を解くコードを示します。
const arr = ["abode","ABc","xyzD"];
const findIndexPairCount = (arr = []) => {
const alphabet = 'abcdefghijklmnopqrstuvwxyz'
const res = [];
for (let i = 0; i < arr.length; i++) {
let count = 0;
for (let j = 0; j < arr[i].length; j++) {
if (arr[i][j].toLowerCase() === alphabet[j]) {
count++;
}
}
res.push(count);
}
return res;
};
console.log(findIndexPairCount(arr));
出力結果
[ 4, 3, 1 ]
コードの解説
この実装では、まず基準となるアルファベット文字列「abcdefghijklmnopqrstuvwxyz」を用意しています。次に、外側のループで入力配列の各文字列を順に処理し、内側のループで各文字を先頭から調べていきます。
ポイントは toLowerCase() を使って大文字を小文字に変換してから比較している点です。これにより、入力に大文字が含まれていても正しく判定できます。たとえば2つ目の要素「ABc」では、「A」「B」「c」がすべて小文字化されると「abc」となり、それぞれアルファベット上の位置と一致するため、カウントは3になります。
各文字列の判定結果は配列 res に格納され、最終的に [4, 3, 1] という結果が出力されます。「abode」では a・b・o・e の4文字が一致し、「xyzD」では d のみ(D を小文字化したもの)が4番目に一致するため1となります。
-
JavaScriptで文字列の二次元配列をソートして対角要素を見つける方法
本記事では、文字列の配列を扱うJavaScriptのアルゴリズム問題を解説します。「配列をアルファベット順にソートした後、対角線上の文字を抽出する」というシンプルながら応用範囲の広いテクニックを、サンプルコードとともにわかりやすく紹介します。 問題 n個の文字列を要素として持つ配列を受け取るJavaScript関数を作成します。ここで、配列内の各文字列はすべてちょうどn文字で構成されているものとします。つまり、この配列はn×nの正方行列として扱うことができます。 関数には以下の2つの処理が求められます。 まず、配列をアルファベット順(辞書順)にソートすること 次に、ソート後の配列を行列とみな
-
【JavaScript】str2内に出現するstr1の文字数をカウントして返す方法
問題2つの文字列 str1 と str2 を第1引数・第2引数として受け取るJavaScript関数を作成する必要があります。この関数の役割は、str1 に含まれる文字のうち、str2 にも出現する文字の個数を数えて返すことです。同じ文字が複数回出現する場合は、それぞれを別々にカウントします。たとえば、関数への入力が次のような場合を考えてみましょう。入力const str1 = Kk; const str2 = klKKkKsl;出力const output = 5;この場合、str1 の文字「K」と「k」は str2 内に合計5回出現するため、結果は 5 となります。 コード例以下が実際のコ