JavaScript で文字列内の最長の単語を見つける 3 つの方法 (推奨)

JavaScript で文字列内の最長の単語を見つける 3 つの方法 (推奨)

この記事は、Free Code Camp の基本アルゴリズム スクリプト「文字列内の最長の単語を見つける」に基づいています。

このアルゴリズムでは、各単語を調べて、各単語に含まれる文字の数を数えます。次に、カウントを比較して、どの単語に最も多くの文字数があるかを判断し、最も長い単語の長さを返します。

この記事では3つの方法について説明します。最初は FOR ループを使用し、2 番目は sort() メソッドを使用し、3 番目は Reduce() メソッドを使用します。

アルゴリズムの課題

  • 指定された文の中で最も長い単語の長さを返します。
  • 回答は数字でなければなりません。

提供されたテストケース

  • findLongestWord("素早い茶色のキツネは怠け者の犬を飛び越えた")は数値を返す
  • findLongestWord("素早い茶色のキツネは怠け者の犬を飛び越えた")は6を返す
  • findLongestWord("May the force be with you") は 5 を返します
  • findLongestWord("Google do a barrel roll")は6を返します
  • findLongestWord("無負荷のツバメの平均対気速度はいくらですか")は8を返します。
  • findLongestWord("耳鼻咽喉科のような非常に長い単語を試したらどうなるか")は19を返します
関数findLongestWord(str) {
 str.length を返します。
}
findLongestWord("素早い茶色のキツネが怠け者の犬を飛び越えた");

1. FORループを使用して最長の単語を見つける

このソリューションでは、String.prototype.split()メソッドを使用します。

  • split() メソッドは、文字列を部分文字列に分割して、文字列オブジェクトを文字列配列に分割します。

split()メソッドの括弧の間にスペースを追加する必要があります。

var strSplit = “素早い茶色のキツネが怠け者の犬を飛び越えた”split(' ');

単語の配列が出力されます:

var strSplit = ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"];

括弧の間にスペースを追加しないと、次の出力が得られます。

var strSplit = 
[“T”、“h”、“e”、“ ”、“q”、“u”、“i”、“c”、“k”、“ ”、“b”、“r”、“o”、“w”、“n”、“ ”、“f”、“o”、“x”、“ ”、“j”、“u”、“m”、“p”、“e”、“d”、“ ”、“o”、“v”、“e”、“r”、“ ”、“t”、“h”、“e”、“ ”、“l”、“a”、“z”、“y”、“ ”、“d”、“o”、“g”];
関数findLongestWord(str) {
 // ステップ1. 文字列を文字列の配列に分割する
 var strSplit = str.split(' ');
 // var strSplit = "素早い茶色のキツネが怠け者の犬を飛び越えた".split(' ');
 // var strSplit = ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"];
 
 // ステップ2. 最長単語の長さを保持する変数を初期化する
 var 最長単語 = 0;

 // ステップ3. FORループを作成する
 for(var i = 0; i < strSplit.length; i++){
 if(strSplit[i].length > longestWord){ // strSplit[i].length が比較対象の単語より大きい場合...
 longestWord = strSplit[i].length; // ...longestWordはこの新しい値を取得します
  }
 }
 /* ここでは strSplit.length = 9
  各反復について: i = ? i < strSplit.length? i++ if(strSplit[i].length > longestWord)? longestWord = strSplit[i].length
  1 回目の反復: 0 はい 1 if("The".length > 0)? => if(3 > 0)? longestWord = 3
  2 回目の反復: 1 yes 2 if("quick".length > 3)? => if(5 > 3)? longestWord = 5 
  3 回目の反復: 2 はい 3 if("brown".length > 5)? => if(5 > 5)? longestWord = 5 
  4 回目の反復: 3 はい 4 if("fox".length > 5)? => if(3 > 5)? longestWord = 5 
  5 回目の反復: 4 はい 5 if("jumped".length > 5)? => if(6 > 5)? longestWord = 6 
  6 回目の反復: 5 はい 6 if("over".length > 6)? => if(4 > 6)? longestWord = 6 
  7 回目の反復: 6 はい 7 if("the".length > 6)? => if(3 > 6)? longestWord = 6
  8 回目の反復: 7 はい 8 if("lazy".length > 6)? => if(4 > 6)? longestWord = 6 
  9 回目の反復: 8 はい 9 if("dog".length > 6)? => if(3 > 6)? longestWord = 6 
  10回目の繰り返し: 9 いいえ    
  FORループの終了*/

 //ステップ4. 最長の単語を返す
 longestWord を返す; // 6
}

findLongestWord("素早い茶色のキツネが怠け者の犬を飛び越えた");

コメントはありません:

関数findLongestWord(str) {
 var strSplit = str.split(' ');
 var 最長単語 = 0;
 for(var i = 0; i < strSplit.length; i++){
 (strSplit[i].length > longestWord)の場合{
 最長単語 = strSplit[i].length;
  }
 }
 longestWord を返します。
}
findLongestWord("素早い茶色のキツネが怠け者の犬を飛び越えた");

2. sort() メソッドを使用して最長の単語を見つける

このソリューションでは、Array.prototype.sort() メソッドを使用して、いくつかのソート基準に従って配列をソートし、この配列の最初の要素の長さを返します。

  • sort() メソッドは配列の要素をソートし、配列を返します。

この場合、配列をソートするだけで

var sortArray = [“The”、“quick”、“brown”、“fox”、“jumped”、“over”、“the”、“lazy”、“dog”].sort();

次のような出力が得られます。

var sortArray = ["The", "brown", "dog", "fox", "jumped", "lazy", "over", "quick", "the"];

Unicode では、数字は大文字の前にあり、大文字は小文字の前にあります。

何らかのソート基準に従って要素をソートする必要がある

[].sort(function(firstElement, secondElement) { return secondElement.length — firstElement.length; })

配列内の 2 番目の要素の長さと最初の要素の長さを比較します。

関数findLongestWord(str) {
 // ステップ1. 文字列を文字列の配列に分割する
 var strSplit = str.split(' ');
 // var strSplit = "素早い茶色のキツネが怠け者の犬を飛び越えた".split(' ');
 // var strSplit = ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"];
 
 // ステップ2. 配列内の要素を並べ替える
 var longestWord = strSplit.sort(function(a, b) { 
 b.length - a.length を返します。
 });
 /* ソート処理
 ab b.length a.length var longestWord
 「その」「速い」5 3 [「速い」、「その」]
 「クイック」 「ブラウン」 5 5 [「クイック」、「ブラウン」、「ザ」] 
 「茶色」 「キツネ」 3 5 [「素早い」、「茶色」、「その」、「キツネ」]
 「キツネ」 「ジャンプした」 6 3 [「ジャンプした」、素早い、「茶色の」、「その」、「キツネ」]
 「飛び越えた」 「飛び越えた」 4 6 [「飛び越えた」、素早い、「茶色い」、「飛び越えた」、「その」、「キツネ」]
 「越えて」「その」3 4 [「飛び越えた」「素早く」「茶色の」「越えて」「その」「キツネ」「その」]
 「その」「怠け者」4 3 [「飛び跳ねた」「素早い」「茶色の」「越えた」「怠け者」「その」「キツネ」「その」]
 「怠け者」「犬」3 4 [「ジャンプした」「素早い」「茶色の」「越えた」「怠け者」「その」「キツネ」「その」「犬」]
 */
 
 // ステップ3. 配列の最初の要素の長さを返す
 return longestWord[0].length; // var longestWord = ["jumped", "quick", "brown", "over", "lazy", "The", "fox", "the", "dog"];
        // longestWord[0]="jumped" => jumped".length => 6
}

findLongestWord("素早い茶色のキツネが怠け者の犬を飛び越えた");

コメントはありません:

関数findLongestWord(str) {
 var longestWord = str.split(' ').sort(function(a, b) { return b.length - a.length; });
 longestWord[0].lengthを返します。
}
findLongestWord("素早い茶色のキツネが怠け者の犬を飛び越えた");

3.reduce()メソッドを使用して最長の単語を見つける

このソリューションでは、Array.prototype.reduce() を使用します。

  • Reduce() メソッドは、リザーバーと配列の各値 (左から右へ) に関数を適用して、単一の値に減らします。

Reduce() は、配列内の各要素に対してコールバック関数を 1 回実行します。

2 番目の引数として初期値を指定することもできます。ここでは空の文字列 "" を追加します。

[].reduce(function(前の値、現在の値) {...}, "");
関数findLongestWord(str) {
 // ステップ1. 文字列を文字列の配列に分割する
 var strSplit = str.split(' ');
 // var strSplit = "素早い茶色のキツネが怠け者の犬を飛び越えた".split(' ');
 // var strSplit = ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"];

 // ステップ2.reduceメソッドを使用する
 var longestWord = strSplit.reduce(function(longest, currentWord) {
 (現在の単語の長さ > 最長の長さ)
  現在の単語を返します。
 それ以外
  最長を返します。
 }, "");
 
 /* プロセスを削減
 currentWord 最長 currentWord.length longest.length if(currentWord.length > longest.length)? var longestWord
 「その」 「」 3 0 はい 「その」
 「速い」 「その」 5 3 はい 「速い」
 「茶色」 「速い」 5 5 いいえ 「速い」
 「キツネ」 「素早い」 3 5 いいえ 「素早い」
 「ジャンプした」 「速い」 6 5 はい 「ジャンプした」
 「越えた」 「飛び越えた」 4 6 いいえ 「飛び越えた」
 「その」「飛び降りた」3 6 いいえ「飛び降りた」
 「怠け者」 「ジャンプした」 4 6 いいえ 「ジャンプした」
 「犬」「飛び跳ねた」3 6 いいえ「飛び跳ねた」
 */
 
 // ステップ3. longestWordの長さを返す
 return longestWord.length; // var longestWord = "jumped" 
        // longestWord.length => "jumped".length => 6
}

findLongestWord("素早い茶色のキツネが怠け者の犬を飛び越えた");

コメントはありません:

関数findLongestWord(str) {
 var longestWord = str.split(' ').reduce(function(longest, currentWord) {
 currentWord.length > longest.length を返します。currentWord: longest;
 }, "");
 longestWord.length を返します。
}
findLongestWord("素早い茶色のキツネが怠け者の犬を飛び越えた");

これで、JavaScript で文字列内の最長の単語を見つける 3 つの方法についての記事は終了です。js で文字列内の最長の単語を見つける方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • 一般的な JavaScript 文字列メソッド 28 個と使用方法のヒントのまとめ
  • JavaScript でよく使われるいくつかの文字列メソッドの概要 (初心者必読)
  • 日付型フィールドをJSON文字列に変換するJavaメソッド
  • JavaScript 文字列を数値に変換する簡単な方法
  • JavaScript 文字列処理の一般的な操作方法のまとめ
  • Javascript 文字列メソッドの詳細な説明

<<:  MySQL 5.7.17 のインストールと設定方法のグラフィック チュートリアル (Windows)

>>:  MySQL 5.7.17 winx64 のインストールと設定のグラフィックチュートリアル

推薦する

MySQLデータ内の多数の改行と復帰に対する解決策

目次問題を見つける1. 改行と復帰を削除する方法2. SELECTクエリで「改行と復帰」を無視する方...

Linux Autofs 自動マウント サービスのインストールと展開のチュートリアル

目次1. autofs サービスの紹介2. Autofsのインストールと展開3. Autofs効果の...

MySQLデータベースインデックスの詳細な紹介

目次マインドマップシンプルな理解インデックスモデルの進化二分探索木自己バランス型二分木BツリーB+ ...

Linux で Nginx 1.16.0 をインストールするための詳細なチュートリアル

最近 Linux をいじっていたので、nginx の新しいバージョンをインストールしたいと思いました...

Vueのフロントエンドとバックエンドのデータのやり取りと表示を理解する方法

目次1. 技術概要2. 技術的な詳細1. インターフェースからバックエンドデータを取得する2. フロ...

MySQL に絵文字表現を挿入できない問題の解決方法

序文最近この問題に遭遇するまで、私は UTF-8 が文字セットの問題に対する普遍的な解決策だと考えて...

JavaScriptプロトタイプとプロトタイプチェーンを徹底的に理解する

目次序文基礎を築くプロトタイプコンストラクタのプロパティ__プロト__プロトタイプチェーン改善する要...

JavaScriptは、マウスが通過したときにドロップダウンボックスを表示するように実装します。

この記事では、マウスがドロップダウンボックスの上を通過するときにドロップダウンボックスを表示するため...

Dockerを使用してAngularプロジェクトをデプロイする方法

Docker を使用して Angular プロジェクトをデプロイする方法は 2 つあります。1 つは...

CSS フロートプロパティ図 フロートプロパティの詳細

CSS の float プロパティを正しく使用することは、カバーすべき内容が多く、ブラウザの互換性の...

Mybatis での動的 SQL ステートメント分析

この記事は主にMybatisでの動的SQL文の解析について紹介します。この記事のサンプルコードは非常...

MySQL で URL タイムゾーンの罠を回避する方法

序文最近、MySQL 6.0.x 以降の jar を使用する場合、コード URL リンクで serv...

MySQL データをエクスポートする際の secure-file-priv 問題の解決方法

エラー 1290 (HY000) : MySQL サーバーは –secure-file-priv オ...

Linux コマンドを使用してオーディオ形式を変換および結合する方法

FFmpeg flacをインストールする eric@ray:~$ sudo apt install ...

Vue カプセル化コンポーネント アップロード画像コンポーネント

この記事の例では、参考のためにvueアップロード画像コンポーネントの具体的なコードを共有しています。...