מאמר זה מבוסס על תסריט תסריט אלגוריתם בסיסי של Free Code Camp " מצא את המילה הארוכה ביותר במחרוזת ".
באלגוריתם זה , אנו רוצים להסתכל על כל מילה בודדת ולספור כמה אותיות בכל אחת. לאחר מכן, השווה את הספירות כדי לקבוע איזו מילה מכילה הכי הרבה תווים והחזיר את אורך המילה הארוכה ביותר.
במאמר זה אעמוד על שלוש גישות. ראשית עם לולאה FOR, שנייה בשיטת sort (), ושלישית בשיטת reduce ().
אתגר האלגוריתם
החזר את אורך המילה הארוכה ביותר במשפט שסופק.התגובה שלך צריכה להיות מספר.
מקרי מבחן מסופקים
- findLongestWord ("השועל החום המהיר קפץ מעל הכלב העצלן") צריך להחזיר מספר
- findLongestWord ("השועל החום המהיר קפץ מעל הכלב העצלן") צריך להחזיר 6
- findLongestWord ("שהכוח יהיה איתך") צריך לחזור 5
- findLongestWord ("גוגל תעשה גליל חבית") צריך להחזיר 6
- findLongestWord ("מה המהירות הממוצעת של מהירות האוויר של סנונית לא טעונה") צריך להחזיר 8
- findLongestWord ("מה אם ננסה מילה ארוכה במיוחד כמו אף אוזן גרון")צריך לחזור 19
function findLongestWord(str) { return str.length; } findLongestWord("The quick brown fox jumped over the lazy dog");
1. מצא את המילה הארוכה ביותר עם לולאה FOR
לפתרון זה נשתמש בשיטת String.prototype.split ()
- שיטת split () מפצלת אובייקט String למערך מחרוזות על ידי הפרדת המחרוזת למחרוזות משנה.
נצטרך להוסיף רווח ריק בין סוגריים של שיטת split () ,
var strSplit = “The quick brown fox jumped over the lazy dog”.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”];
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 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 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");
בלי תגובות:
function findLongestWord(str) { var strSplit = str.split(' '); var longestWord = 0; for(var i = 0; i longestWord){ longestWord = strSplit[i].length; } } return longestWord; } findLongestWord("The quick brown fox jumped over the lazy dog");
2. מצא את המילה הארוכה ביותר בשיטת המיון ()
לפתרון זה נשתמש בשיטת Array.prototype.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; })
כאשר אורכו של האלמנט השני מושווה לאורכו של האלמנט הראשון במערך.
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");
בלי תגובות:
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. מצא את המילה הארוכה ביותר בשיטת הצמצום ()
לפתרון זה נשתמש ב- Array.prototype.reduce ().
- שיטת הצמצום () מחילה פונקציה כנגד מצבר וכל ערך של המערך (משמאל לימין) כדי להפחית אותו לערך יחיד.
reduce () מבצע פונקציית התקשרות חוזרת פעם אחת עבור כל אלמנט הקיים במערך.
אתה יכול לספק ערך התחלתי כארגומנט השני להפחתה, כאן נוסיף מחרוזת ריקה "".
[].reduce(function(previousValue, currentValue) {...}, “”);
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");
בלי תגובות:
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");
אני מקווה שמצאת את זה מועיל. זה חלק מסדרת המאמרים שלי "כיצד לפתור אלגוריתמים של FCC" על אתגרי האלגוריתם של מחנות קוד חופשי, שם אני מציע מספר פתרונות ומסביר צעד אחר צעד מה קורה מתחת למכסה המנוע.
שלוש דרכים לחזור על מחרוזת ב- JavaScript
במאמר זה אסביר כיצד לפתור את האתגר "חזור על מחרוזת וחזור על מחרוזת" של freeCodeCamp. זה כרוך ...
Two ways to confirm the ending of a String in JavaScript
In this article, I’ll explain how to solve freeCodeCamp’s “Confirm the Ending” challenge.
Three Ways to Reverse a String in JavaScript
This article is based on Free Code Camp Basic Algorithm Scripting “Reverse a String”
Three Ways to Factorialize a Number in JavaScript
This article is based on Free Code Camp Basic Algorithm Scripting “Factorialize a Number”
Two Ways to Check for Palindromes in JavaScript
This article is based on Free Code Camp Basic Algorithm Scripting “Check for Palindromes”.
Three Ways to Title Case a Sentence in JavaScript
This article is based on Free Code Camp Basic Algorithm Scripting “Title Case a Sentence”.
Three ways you can find the largest number in an array using JavaScript
In this article, I’m going to explain how to solve Free Code Camp’s “Return Largest Numbers in Arrays” challenge. This…
If you have your own solution or any suggestions, share them below in the comments.
Or you can follow me on Medium, Twitter, Github and LinkedIn, right after you click the green heart below ;-)
#StayCurious, #KeepOnHacking & #MakeItHappen!
Resources
- split() method — MDN
- sort() method — MDN
- reduce() — MDN
- String.length — MDN
- for — MDN