JavaScriptで文字列内の最短・最長の単語を抽出する方法
文字列を受け取り、その中で最も短い単語と最も長い単語をそれぞれ含む配列(2つの文字列値)を返すJavaScript関数を作成する必要があります。
問題の例
たとえば、次のような文字列が与えられたとします。
const str = "Hardships often prepare ordinary people for an extraordinary destiny";
この場合、期待される出力は以下のようになります。
const output = ["an", "extraordinary"];
解決のアプローチ
この関数は、以下の手順で実装できます。
split(" ")メソッドを使って、文字列をスペースで分割し、単語の配列を生成します。- 配列の最初の単語を「最小」と「最大」の初期値として設定します。
- 2番目以降の単語をループ処理し、各単語の長さを現在の最小値・最大値と比較します。
- より短い単語が見つかれば最小値を、より長い単語が見つかれば最大値を更新します。
- 最後に
[min, max]の形式で結果を返します。
コード例
以下が実際のコードです。
const str = "Hardships often prepare ordinary people for an extraordinary destiny";
const largestSmallest = str => {
const strArr = str.split(" ");
let min = strArr[0];
let max = strArr[0];
for(let i = 1; i < strArr.length; i++){
if(strArr[i].length < min.length){
min = strArr[i];
};
if(strArr[i].length > max.length){
max = strArr[i];
};
};
return [min, max];
};
console.log(largestSmallest(str));出力結果
コンソールに出力される結果は以下の通りです。
[ 'an', 'extraordinary' ]
コードの解説
このコードでは、まず split(" ") によって文字列をスペース区切りで分割し、単語の配列を作成しています。続いて、配列の先頭の要素を最小値・最大値の初期値とし、2番目以降の要素を順番に比較することで、最短の単語と最長の単語を一度の走査で効率的に見つけ出します。
このアルゴリズムの時間計算量は O(n) であり、文字列に含まれる単語の数に対して線形のパフォーマンスを発揮するため、長いテキストでも高速に動作します。なお、同じ長さの単語が複数ある場合は、先に出現した単語が優先されます。
-
JavaScriptのTextEncoderとTextDecoderとは?文字列とバイト列の相互変換をわかりやすく解説
JavaScriptでは、文字列とバイト列(バイナリデータ)を相互に変換したい場面がよくあります。そんなときに活躍するのが、TextEncoderとTextDecoderという2つの標準組み込みAPIです。本記事では、それぞれの役割と基本的な使い方を、実際に動くサンプルコードとともに解説します。 TextEncoderとは TextEncoderは、指定した文字列をUTF-8形式に変換(エンコード)するためのオブジェクトです。encode()メソッドに文字列を渡すと、変換結果がUint8Array(符号なし8ビット整数の配列)として返されます。 TextDecoderとは TextDecod
-
【C++】文字列内の最短語と最長語を検索するプログラムの作成方法
問題概要 本記事では、与えられた文字列 str の中から最も短い単語(最短語)と最も長い単語(最長語)を検索するプログラムをC++で作成する方法を解説します。 問題の説明 ― 文字列が1つ与えられます。その文字列に含まれるすべての単語の中から、文字数が最も多い単語と最も少ない単語を求めます。なお、単語は半角スペースまたはNULL文字('\0')で区切られているものとします。 入力例 str = “Learn Programming at TutorialsPoint” 出力例 smallest word = at largest word = Tutor