本文基于Free Code Camp基本算法腳本“查找字符串中最長(zhǎng)的單詞”。
在此算法中,我們要查看每個(gè)單詞并計(jì)算每個(gè)單詞中有多少個(gè)字母。然后,比較計(jì)數(shù)以確定哪個(gè)單詞的字符最多,并返回最長(zhǎng)單詞的長(zhǎng)度。
在本文中,我將解釋三種方法。首先使用FOR循環(huán),其次使用sort()方法,第三次使用reduce()方法。
算法挑戰(zhàn)
- 返回提供的句子中最長(zhǎng)單詞的長(zhǎng)度。
- 您的回復(fù)應(yīng)該是一個(gè)數(shù)字。
提供的測(cè)試用例
- findLongestWord(“The quick brown fox jumped over the lazy dog”)返回一個(gè)數(shù)字
- findLongestWord(“The quick brown fox jumped over the lazy dog”)返回6
- findLongestWord(“May the force be with you”)返回5
- findLongestWord(“Google do a barrel roll”)返回6
- findLongestWord(“What is the average airspeed velocity of an unladen swallow”)返回8
- findLongestWord(“What if we try a super-long word such as otorhinolaryngology”)返回19
1
2
3
4
|
function findLongestWord(str) { return str.length; } findLongestWord( "The quick brown fox jumped over the lazy dog" ); |
1.使用FOR循環(huán)查找最長(zhǎng)的單詞
對(duì)于此解決方案,我們將使用String.prototype.split()方法
- split()的方法通過(guò)分離串分成子串分割字符串對(duì)象到字符串?dāng)?shù)組。
我們將需要在split()方法的括號(hào)之間添加一個(gè)空格
1
|
var strSplit = “The quick brown fox jumped over the lazy dog”.split(‘ ‘); |
它將輸出一個(gè)由單詞組成的數(shù)組:
1
|
var strSplit = [“The”, “quick”, “brown”, “fox”, “jumped”, “over”, “the”, “lazy”, “dog”]; |
如果不在括號(hào)中添加空格,則將得到以下輸出:
1
2
|
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”]; |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
function findLongestWord(str) { // Step 1. Split the string into an array of strings var strSplit = str.split( ' ' ); // var strSplit = "The quick brown fox jumped over the lazy dog".split(' '); // var strSplit = ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"]; // Step 2. Initiate a variable that will hold the length of the longest word var longestWord = 0; // Step 3. Create the FOR loop for ( var i = 0; i < strSplit.length; i++){ if (strSplit[i].length > longestWord){ // If strSplit[i].length is greater than the word it is compared with... longestWord = strSplit[i].length; // ...then longestWord takes this new value } } /* Here strSplit.length = 9 For each iteration: i = ? i < strSplit.length? i++ if(strSplit[i].length > longestWord)? longestWord = strSplit[i].length 1st iteration: 0 yes 1 if("The".length > 0)? => if(3 > 0)? longestWord = 3 2nd iteration: 1 yes 2 if("quick".length > 3)? => if(5 > 3)? longestWord = 5 3rd iteration: 2 yes 3 if("brown".length > 5)? => if(5 > 5)? longestWord = 5 4th iteration: 3 yes 4 if("fox".length > 5)? => if(3 > 5)? longestWord = 5 5th iteration: 4 yes 5 if("jumped".length > 5)? => if(6 > 5)? longestWord = 6 6th iteration: 5 yes 6 if("over".length > 6)? => if(4 > 6)? longestWord = 6 7th iteration: 6 yes 7 if("the".length > 6)? => if(3 > 6)? longestWord = 6 8th iteration: 7 yes 8 if("lazy".length > 6)? => if(4 > 6)? longestWord = 6 9th iteration: 8 yes 9 if("dog".length > 6)? => if(3 > 6)? longestWord = 6 10th iteration: 9 no End of the FOR Loop*/ //Step 4. Return the longest word return longestWord; // 6 } findLongestWord( "The quick brown fox jumped over the lazy dog" ); |
沒(méi)有注釋:
1
2
3
4
5
6
7
8
9
10
11
|
function findLongestWord(str) { var strSplit = str.split( ' ' ); var longestWord = 0; for ( var i = 0; i < strSplit.length; i++){ if (strSplit[i].length > longestWord){ longestWord = strSplit[i].length; } } return longestWord; } findLongestWord( "The quick brown fox jumped over the lazy dog" ); |
2.使用sort()方法找到最長(zhǎng)的單詞
對(duì)于此解決方案,我們將使用Array.prototype.sort()方法按照某種排序標(biāo)準(zhǔn)對(duì)數(shù)組進(jìn)行排序,然后返回此數(shù)組的第一個(gè)元素的長(zhǎng)度。
- sort()的方法進(jìn)行排序的陣列的代替元素并返回?cái)?shù)組。
就我們而言,如果我們只是對(duì)數(shù)組排序
1
|
var sortArray = [“The”, “quick”, “brown”, “fox”, “jumped”, “over”, “the”, “lazy”, “dog”].sort(); |
我們將得到以下輸出:
1
|
var sortArray = [“The”, “brown”, “dog”, “fox”, “jumped”, “lazy”, “over”, “quick”, “the”]; |
在Unicode中,數(shù)字在大寫(xiě)字母之前,而在小寫(xiě)字母之前。
我們需要按照某種排序標(biāo)準(zhǔn)對(duì)元素進(jìn)行排序
1
|
[].sort( function (firstElement, secondElement) { return secondElement.length — firstElement.length; }) |
比較第二個(gè)元素的長(zhǎng)度和數(shù)組中第一個(gè)元素的長(zhǎng)度。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
function findLongestWord(str) { // Step 1. Split the string into an array of strings var strSplit = str.split( ' ' ); // var strSplit = "The quick brown fox jumped over the lazy dog".split(' '); // var strSplit = ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"]; // Step 2. Sort the elements in the array var longestWord = strSplit.sort( function (a, b) { return b.length - a.length; }); /* Sorting process a b b.length a.length var longestWord "The" "quick" 5 3 ["quick", "The"] "quick" "brown" 5 5 ["quick", "brown", "The"] "brown" "fox" 3 5 ["quick", "brown", "The", "fox"] "fox" "jumped" 6 3 ["jumped", quick", "brown", "The", "fox"] "jumped" "over" 4 6 ["jumped", quick", "brown", "over", "The", "fox"] "over" "the" 3 4 ["jumped", quick", "brown", "over", "The", "fox", "the"] "the" "lazy" 4 3 ["jumped", quick", "brown", "over", "lazy", "The", "fox", "the"] "lazy" "dog" 3 4 ["jumped", quick", "brown", "over", "lazy", "The", "fox", "the", "dog"] */ // Step 3. Return the length of the first element of the array return longestWord[0].length; // var longestWord = ["jumped", "quick", "brown", "over", "lazy", "The", "fox", "the", "dog"]; // longestWord[0]="jumped" => jumped".length => 6 } findLongestWord( "The quick brown fox jumped over the lazy dog" ); |
沒(méi)有注釋:
1
2
3
4
5
|
function findLongestWord(str) { var longestWord = str.split( ' ' ).sort( function (a, b) { return b.length - a.length; }); return longestWord[0].length; } findLongestWord( "The quick brown fox jumped over the lazy dog" ); |
3.使用reduce()方法找到最長(zhǎng)的單詞
對(duì)于此解決方案,我們將使用Array.prototype.reduce()。
- reduce()的方法應(yīng)用于對(duì)一個(gè)儲(chǔ)液器的功能和所述陣列的每一值(從左到右),以將其降低到一個(gè)值。
reduce()對(duì)數(shù)組中存在的每個(gè)元素執(zhí)行一次回調(diào)函數(shù)。
您可以提供一個(gè)初始值作為要減少的第二個(gè)參數(shù),這里我們將添加一個(gè)空字符串“”。
1
|
[].reduce( function (previousValue, currentValue) {...}, “”); |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
function findLongestWord(str) { // Step 1. Split the string into an array of strings var strSplit = str.split( ' ' ); // var strSplit = "The quick brown fox jumped over the lazy dog".split(' '); // var strSplit = ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"]; // Step 2. Use the reduce method var longestWord = strSplit.reduce( function (longest, currentWord) { if (currentWord.length > longest.length) return currentWord; else return longest; }, "" ); /* Reduce process currentWord longest currentWord.length longest.length if(currentWord.length > longest.length)? var longestWord "The" "" 3 0 yes "The" "quick" "The" 5 3 yes "quick" "brown" "quick" 5 5 no "quick" "fox" "quick" 3 5 no "quick" "jumped" "quick" 6 5 yes "jumped" "over" "jumped" 4 6 no "jumped" "the" "jumped" 3 6 no "jumped" "lazy" "jumped" 4 6 no "jumped" "dog" "jumped" 3 6 no "jumped" */ // Step 3. Return the length of the longestWord return longestWord.length; // var longestWord = "jumped" // longestWord.length => "jumped".length => 6 } findLongestWord( "The quick brown fox jumped over the lazy dog" ); |
沒(méi)有注釋:
1
2
3
4
5
6
7
|
function findLongestWord(str) { var longestWord = str.split( ' ' ).reduce( function (longest, currentWord) { return currentWord.length > longest.length ? currentWord : longest; }, "" ); return longestWord.length; } findLongestWord( "The quick brown fox jumped over the lazy dog" ); |
到此這篇關(guān)于在JavaScript中查找字符串中最長(zhǎng)單詞的三種方法的文章就介紹到這了,更多相關(guān)js查找字符串最長(zhǎng)單詞內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://blog.csdn.net/qq_25879801/article/details/111408976