Ba cách để tìm từ dài nhất trong chuỗi trong JavaScript


Bài viết này dựa trên Free Code Camp Basic Algorithm Scripting “Tìm từ dài nhất trong một chuỗi”.

Trong thuật toán này, chúng tôi muốn xem xét từng từ riêng lẻ và đếm xem có bao nhiêu chữ cái trong mỗi từ. Sau đó, so sánh số đếm để xác định từ nào có nhiều ký tự nhất và trả về độ dài của từ dài nhất.

Trong bài viết này, tôi sẽ giải thích ba cách tiếp cận. Đầu tiên với vòng lặp FOR, thứ hai sử dụng phương thức sort() và thứ ba sử dụng phương thức reduce().

Thử thách thuật toán

Trả về độ dài của từ dài nhất trong câu được cung cấp.

Câu trả lời của bạn phải là một con số.

Các trường hợp thử nghiệm được cung cấp

  • findLongestWord(“Con cáo nâu nhanh nhẹn nhảy qua con chó lười biếng”) nên trả lại một số
  • findLongestWord(“Con cáo nâu nhanh nhẹn nhảy qua con chó lười biếng”) nên trả lại 6
  • findLongestWord(“Có thể sức mạnh sẽ ở bên bạn”) nên trả lại 5
  • findLongestWord(“Google cuộn thùng”) nên trả lại 6
  • findLongestWord(“Vận tốc bay trung bình của một con én không tải là bao nhiêu”) nên trả lại 8
  • findLongestWord(“Điều gì sẽ xảy ra nếu chúng ta thử một từ siêu dài chẳng hạn như otorhinolaryngology”) nên trả lại 19
function findLongestWord(str) {
  return str.length;
}
findLongestWord("The quick brown fox jumped over the lazy dog");

1. Tìm từ dài nhất với vòng lặp FOR

Đối với giải pháp này, chúng tôi sẽ sử dụng phương thức String.prototype.split()

  • Các tách ra() phương thức tách một đối tượng Chuỗi thành một mảng các chuỗi bằng cách tách chuỗi thành các chuỗi con.

Chúng ta sẽ cần thêm một khoảng trống giữa dấu ngoặc đơn của tách ra() phương pháp,

var strSplit = “The quick brown fox jumped over the lazy dog”.split(‘ ‘);

sẽ xuất ra một mảng các từ riêng biệt:

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

Nếu bạn không thêm dấu cách vào dấu ngoặc đơn, bạn sẽ có kết quả như sau:

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 < 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");
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. Tìm từ dài nhất với phương thức sort()

Đối với giải pháp này, chúng ta sẽ sử dụng phương thức Array.prototype.sort() để sắp xếp mảng theo một số tiêu chí sắp xếp và sau đó trả về độ dài của phần tử đầu tiên của mảng này.

  • Các loại() phương thức sắp xếp các phần tử của một mảng tại chỗ và trả về mảng.
Đọc thêm  Kiểm tra JS cho Null – Giải thích về kiểm tra Null trong JavaScript

Trong trường hợp của chúng ta, nếu chúng ta chỉ sắp xếp mảng

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

chúng ta sẽ có đầu ra này:

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

Trong Unicode, các số đứng trước các chữ in hoa, các chữ cái này đứng trước các chữ in thường.

Chúng ta cần sắp xếp các phần tử theo một số tiêu chí sắp xếp,

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

trong đó độ dài của phần tử thứ hai được so sánh với độ dài của phần tử đầu tiên trong mảng.

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. Tìm từ dài nhất với phương thức reduce()

Đối với giải pháp này, chúng tôi sẽ sử dụng Array.prototype.reduce().

  • Các giảm() phương thức áp dụng một hàm đối với bộ tích lũy và mỗi giá trị của mảng (từ trái sang phải) để giảm nó thành một giá trị duy nhất.
Đọc thêm  Toán tử Dấu hỏi (?) Hoạt động như thế nào trong JavaScript

reduce() thực thi hàm gọi lại một lần cho mỗi phần tử có trong mảng.

Bạn có thể cung cấp một giá trị ban đầu làm đối số thứ hai để giảm, ở đây chúng tôi sẽ thêm một chuỗi rỗng “”.

[].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");

Tôi hy vọng bạn tìm thấy điều này hữu ích. Đây là một phần trong loạt bài viết “Cách giải quyết các thuật toán FCC” của tôi về Các thách thức về thuật toán của Free Code Camp, trong đó tôi đề xuất một số giải pháp và giải thích từng bước những gì xảy ra bên trong.

Đọc thêm  Trình xử lý sự kiện JavaScript – Cách xử lý sự kiện trong JS

Ba cách để lặp lại một chuỗi trong JavaScript
Trong bài viết này, tôi sẽ giải thích cách giải quyết thử thách “Lặp lại một chuỗi lặp lại một chuỗi” của freeCodeCamp. Điều này liên quan đến…

Hai cách để xác nhận kết thúc của Chuỗi trong JavaScript
Trong bài viết này, tôi sẽ giải thích cách giải quyết thử thách “Xác nhận kết thúc” của freeCodeCamp.

Ba cách để đảo ngược một chuỗi trong JavaScript
Bài viết này dựa trên Free Code Camp Basic Algorithm Scripting “Reverse a String”

Ba cách để thừa số hóa một số trong JavaScript
Bài viết này dựa trên Free Code Camp Basic Algorithm Scripting “Factorialize a Number”

Hai cách để kiểm tra Palindromes trong JavaScript
Bài viết này dựa trên Free Code Camp Basic Algorithm Scripting “Check for Palindromes”.

Ba cách đặt tiêu đề cho một câu trong JavaScript
Bài viết này dựa trên Kịch bản thuật toán cơ bản của Free Code Camp “Tiêu đề trường hợp một câu”.

Ba cách bạn có thể tìm thấy số lớn nhất trong một mảng bằng JavaScript
Trong bài viết này, tôi sẽ giải thích cách giải quyết thử thách “Trả về số lớn nhất trong mảng” của Free Code Camp. Cái này…

Nếu bạn có giải pháp của riêng mình hoặc bất kỳ đề xuất nào, hãy chia sẻ chúng bên dưới phần bình luận.

Hoặc bạn có thể theo dõi tôi trên Trung bình, TwitterGithubLinkedInngay sau khi bạn nhấp vào trái tim màu xanh bên dưới 😉

#‎StayCurious, #‎KeepOnHacking & #‎MakeItHappen!

Tài nguyên





Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status