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”

Đảo ngược một chuỗi là một trong những câu hỏi JavaScript thường gặp nhất trong vòng phỏng vấn kỹ thuật. Người phỏng vấn có thể yêu cầu bạn viết các cách khác nhau để đảo ngược một chuỗi hoặc họ có thể yêu cầu bạn đảo ngược một chuỗi mà không sử dụng các phương pháp có sẵn hoặc thậm chí họ có thể yêu cầu bạn đảo ngược một chuỗi bằng cách sử dụng đệ quy.

Có thể có hàng chục cách khác nhau để làm điều đó, ngoại trừ hàm đảo ngược được tích hợp sẵn , vì JavaScript không có.

Dưới đây là ba cách thú vị nhất của tôi để giải quyết vấn đề đảo ngược một chuỗi trong JavaScript.

Thử thách thuật toán

Đảo ngược chuỗi được cung cấp.

Bạn có thể cần biến chuỗi thành một mảng trước khi có thể đảo ngược nó.

Kết quả của bạn phải là một chuỗi.

function reverseString(str) { return str; } reverseString("hello");

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

  • reverseString (“xin chào”) sẽ trở thành “olleh”
  • reverseString (“Howdy”) sẽ trở thành “ydwoH”
  • reverseString ("Lời chào từ Trái đất") sẽ trả về "htraE morf sgniteerG"

1. Đảo ngược một chuỗi với các chức năng tích hợp

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

  • Phương thức split () chia một đối tượng String thành một mảng chuỗi bằng cách tách chuỗi thành các chuỗi con.
  • Phương thức reverse () đảo ngược một mảng tại chỗ. Phần tử mảng đầu tiên trở thành phần tử cuối cùng và phần tử cuối cùng trở thành phần tử đầu tiên.
  • Phương thức join () nối tất cả các phần tử của mảng thành một chuỗi.
function reverseString(str) { // Step 1. Use the split() method to return a new array var splitString = str.split(""); // var splitString = "hello".split(""); // ["h", "e", "l", "l", "o"] // Step 2. Use the reverse() method to reverse the new created array var reverseArray = splitString.reverse(); // var reverseArray = ["h", "e", "l", "l", "o"].reverse(); // ["o", "l", "l", "e", "h"] // Step 3. Use the join() method to join all elements of the array into a string var joinArray = reverseArray.join(""); // var joinArray = ["o", "l", "l", "e", "h"].join(""); // "olleh" //Step 4. Return the reversed string return joinArray; // "olleh" } reverseString("hello");

Nối ba phương pháp với nhau:

function reverseString(str) { return str.split("").reverse().join(""); } reverseString("hello");

2. Đảo ngược một chuỗi với một vòng lặp giảm dần

function reverseString(str) { // Step 1. Create an empty string that will host the new created string var newString = ""; // Step 2. Create the FOR loop /* The starting point of the loop will be (str.length - 1) which corresponds to the last character of the string, "o" As long as i is greater than or equals 0, the loop will go on We decrement i after each iteration */ for (var i = str.length - 1; i >= 0; i--) { newString += str[i]; // or newString = newString + str[i]; } /* Here hello's length equals 5 For each iteration: i = str.length - 1 and newString = newString + str[i] First iteration: i = 5 - 1 = 4, newString = "" + "o" = "o" Second iteration: i = 4 - 1 = 3, newString = "o" + "l" = "ol" Third iteration: i = 3 - 1 = 2, newString = "ol" + "l" = "oll" Fourth iteration: i = 2 - 1 = 1, newString = "oll" + "e" = "olle" Fifth iteration: i = 1 - 1 = 0, newString = "olle" + "h" = "olleh" End of the FOR Loop*/ // Step 3. Return the reversed string return newString; // "olleh" } reverseString('hello');

Không có bình luận:

function reverseString(str) { var newString = ""; for (var i = str.length - 1; i >= 0; i--) { newString += str[i]; } return newString; } reverseString('hello');

3. Đảo ngược một chuỗi với đệ quy

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

  • Phương thức substr () trả về các ký tự trong một chuỗi bắt đầu tại vị trí được chỉ định thông qua số ký tự được chỉ định.
"hello".substr(1); // "ello"
  • Phương thức charAt () trả về ký tự được chỉ định từ một chuỗi.
"hello".charAt(0); // "h"

Độ sâu của đệ quy bằng độ dài của Chuỗi. Giải pháp này không phải là giải pháp tốt nhất và sẽ thực sự chậm nếu Chuỗi rất dài và kích thước ngăn xếp là mối quan tâm lớn.

function reverseString(str) { if (str === "") // This is the terminal case that will end the recursion return ""; else return reverseString(str.substr(1)) + str.charAt(0); /* First Part of the recursion method You need to remember that you won’t have just one call, you’ll have several nested calls Each call: str === "?" reverseString(str.subst(1)) + str.charAt(0) 1st call – reverseString("Hello") will return reverseString("ello") + "h" 2nd call – reverseString("ello") will return reverseString("llo") + "e" 3rd call – reverseString("llo") will return reverseString("lo") + "l" 4th call – reverseString("lo") will return reverseString("o") + "l" 5th call – reverseString("o") will return reverseString("") + "o" Second part of the recursion method The method hits the if condition and the most highly nested call returns immediately 5th call will return reverseString("") + "o" = "o" 4th call will return reverseString("o") + "l" = "o" + "l" 3rd call will return reverseString("lo") + "l" = "o" + "l" + "l" 2nd call will return reverserString("llo") + "e" = "o" + "l" + "l" + "e" 1st call will return reverserString("ello") + "h" = "o" + "l" + "l" + "e" + "h" */ } reverseString("hello");

Không có bình luận:

function reverseString(str) { if (str === "") return ""; else return reverseString(str.substr(1)) + str.charAt(0); } reverseString("hello");

Toán tử có điều kiện (bậc ba):

function reverseString(str) { return (str === '') ? '' : reverseString(str.substr(1)) + str.charAt(0); } reverseString("hello");

Reversing a String in JavaScript is a small and simple algorithm that can be asked on a technical phone screening or a technical interview. You could take the short route in solving this problem, or take the approach by solving it with recursion or even more complex solutions.

I hope you found this helpful. This is part of my “How to Solve FCC Algorithms” series of articles on the Free Code Camp Algorithm Challenges, where I propose several solutions and explain step-by-step what happens under the hood.

Three ways to repeat a string in JavaScript

In this article, I’ll explain how to solve freeCodeCamp’s “Repeat a string repeat a string” challenge. This involves…

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 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 Find the Longest Word in a String in JavaScript

This article is based on Free Code Camp Basic Algorithm Scripting “Find the Longest Word in a String”.

Three Ways to Title Case a Sentence in JavaScript

This article is based on Free Code Camp Basic Algorithm Scripting “Title Case a Sentence”.

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!

Tài nguyên

  • phương thức split () - MDN
  • phương thức reverse () - MDN
  • phương thức join () - MDN
  • String.length - MDN
  • Phương thức substr () - MDN
  • phương thức charAt () - MDN