文字列内に2回繰り返される単語の数を数える方法 - JavaScript
問題の概要
JavaScriptの関数を作成し、文字列の中に2回繰り返して出現する単語がいくつあるかを数える必要があります。
たとえば、入力文字列が次のようになっているとします。
const str = "car bus jeep car jeep bus motorbike truck";
この場合、2回繰り返されている単語は「car」「bus」「jeep」の3つなので、出力は次のようになります。
3
解決のアプローチ
この問題は、次の手順で解くことができます。
- 文字列を
split(" ")でスペース区切りにして、単語の配列に変換する - 各単語について、その単語が最後に出現する位置(
lastIndexOf)が現在のインデックスと一致するかを確認する - 一致しない場合、その単語は後にもう一度出現している(=繰り返されている)ため、カウントを増やす
コード例
以下が実際のコードです。
const str = "car bus jeep car jeep bus motorbike truck";
const countRepetitive = str => {
const strArr = str.split(" ");
let count = 0;
for(let i = 0; i < strArr.length; i++){
if(i === strArr.lastIndexOf(strArr[i])){
continue;
};
count++;
};
return count;
};
console.log(countRepetitive(str));出力結果
コンソールには次のように出力されます。
3
コードの解説
このコードでは、まず str.split(" ") を使って文字列を単語の配列に変換しています。その後、for ループで各単語を走査し、lastIndexOf() の結果が現在のインデックス i と一致する場合は、その単語がこれ以上出現しないことを意味するため continue でスキップします。一致しない場合は、同じ単語が後にもう一度現れていることを示すため、カウントを1つ増やします。
なお、この実装では単語が3回以上出現する場合もカウントされる点に注意してください。厳密に「ちょうど2回」出現する単語だけを数えたい場合は、filter() やオブジェクト(または Map)を使って各単語の出現回数を事前に集計してから判定する方法がより確実です。
-
JavaScriptで文字列に含まれる母音の数を数えて返す方法
ここでは、アルファベットを含む可能性のある文字列を引数として受け取り、その文字列の中に存在する母音(a・e・i・o・u)の個数を数えて返すJavaScript関数の作成方法を解説します。実装のポイントは以下の通りです。大文字・小文字の違いを吸収するため、toLowerCase()で文字列をすべて小文字に変換します。母音の一覧「aeiou」を判定基準(legend)として用意します。文字列を1文字ずつループで走査し、母音リストに含まれる文字であればカウントを増やします。サンプルコード以下が実際のコード例です。 { str = str.toLowerCase(); &nb
-
マジックストリング(魔法の文字列)問題をJavaScriptで解く方法
マジックストリングの問題概要マジックストリング(魔法の文字列)とは、「1」と「2」だけから構成され、次の性質を持つ特別な文字列です。この文字列が「マジック(魔法)」と呼ばれるのは、連続する「1」や「2」のかたまり(グループ)ごとの出現回数をつなぎ合わせると、元の文字列そのものが再現されるからです。文字列 str の最初の部分は次のようになっています。str = 1221121221221121122……str 内の連続した「1」「2」をそれぞれグループに分けると、次のようになります。1 22 11 2 1 22 1 22 11 2 11 22 ……さらに、各グループにおける「1」または「2」の