JavaScriptで文字列内の2番目に短い単語の長さを検索する方法
本記事では、文字列を唯一の引数として受け取り、その中で2番目に短い単語の長さを返すJavaScript関数の作成方法を解説します。
問題の概要
例えば、次のような文字列が与えられた場合を考えてみましょう。
const str = 'This is a sample string';
この文字列に含まれる単語のうち、最も短いのは「a」(長さ1)であり、2番目に短いのは「is」(長さ2)です。したがって、期待される出力は 2 となります。
実装コード
以下が実際のコードです。
const str = 'This is a sample string';
const secondSmallest = str => {
const strArr = str.split(' ');
if(strArr.length < 2){
return false;
}
for(let i = 0; i < strArr.length; i++){
strArr[i] = strArr[i].length;
};
strArr.sort((a, b) => a - b);
return strArr[1];
};
console.log(secondSmallest(str));コードの解説
この関数の処理の流れをステップごとに見ていきましょう。
- 文字列の分割:
split(' ')を使って、文字列をスペース区切りで単語の配列に変換します。 - 要素数のチェック: 配列内の単語が2つ未満の場合、「2番目に短い単語」は存在しないため
falseを返します。 - 長さへの置き換え: ループ処理により、各単語をその文字数に置き換えます。
- 昇順ソート:
sort((a, b) => a - b)を使用し、数値として正しく昇順に並べ替えます。比較関数を指定しないと文字列としてソートされてしまうため注意が必要です。 - 結果の返却: ソート後の配列のインデックス1(2番目の要素)を返します。
出力結果
コンソールには以下のように出力されます。
2
補足:より簡潔に書く方法
map() を活用すれば、ループ処理をより簡潔に記述することもできます。
const secondSmallest = str => {
const lengths = str.split(' ').map(word => word.length);
return lengths.length < 2 ? false : lengths.sort((a, b) => a - b)[1];
};このように、split・map・sort を組み合わせることで、文字列操作を効率的かつ読みやすく実装できます。
-
JavaScriptで文字列の最小削除回数を求める方法
問題の概要例えば、次のようなバイナリ文字列(「0」と「1」だけで構成された文字列)があるとします。const str = 001001;私たちの課題は、このような文字列を唯一の引数として受け取るJavaScript関数を作成することです。関数の役割は、入力された文字列に対して隣り合う2つの文字が同じにならないようにするために必要な最小削除回数を計算し、その結果を返すことです。例えば、上記の文字列の場合、出力は次のようになります。const output = 2;これは、インデックス0と3にある「0」を削除すると、新しい文字列が「0101」となり、隣接する文字がすべて異なる最長の文字列になるため
-
JavaScriptで「良い基数(Good Base)」の最小値を求めるアルゴリズム
良い基数(Good Base)とは= 2)のことを「良い基数(Good Base)」と呼びます。例えば、13 を基数 3 で表すと 111 となるため、3 は num = 13 における良い基数です。問題の概要数値を表す文字列 str を唯一の引数として受け取り、str の良い基数となる最小の数値を文字列形式で返す JavaScript 関数を作成する必要があります。例えば、関数への入力が以下の場合:const str = "4681";出力は次のようになります。const output = "8";出力の説明これは、4681 を基数 8 で表すと 11