Ba cách để đảo ngược một chuỗi trong JavaScript


Bài viết này dựa trên FreeCodeCamp 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 chuỗi hoặc họ có thể yêu cầu bạn đảo ngược chuỗi mà không sử dụng các phương thức có sẵn hoặc thậm chí họ có thể yêu cầu bạn đảo ngược chuỗi bằng cách sử dụng đệ quy.

Có khả năng có hàng chục cách khác nhau để làm điều đó, ngoại trừ cách tích hợp sẵn đảo ngược chức năng, 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 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”) nên trở thành “olleh”
  • ReverseString(“Xin chào”) nên trở thành “ydwoH”
  • reverseString(“Lời chào từ Trái đất”) nên trở lại”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 tôi 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() tách một đối tượng Chuỗi 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ột 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");

Xâu chuỗi ba phương thức lại với nhau:

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

2. Đảo ngược chuỗi với 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');
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 chuỗi bằng đệ 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í đã chỉ định thông qua số lượng ký tự đã 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 với độ 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ẽ rất chậm nếu Chuỗi quá dài và kích thước ngăn xếp là mối quan tâm chính.

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");
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 (Tternary):

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

Đảo ngược chuỗi trong JavaScript là một thuật toán nhỏ và đơn giản có thể được hỏi khi sàng lọc kỹ thuật qua điện thoại hoặc phỏng vấn kỹ thuật. Bạn có thể đi theo con đường ngắn để giải quyết vấn đề này hoặc thực hiện phương pháp bằng cách giải quyết nó bằng đệ quy hoặc các giải pháp thậm chí phức tạp hơn.

Đọc thêm  Cách kiểm tra xem Chuỗi JavaScript có phải là URL hợp lệ không

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.

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 để 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ìm từ dài nhất trong chuỗi 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 “Tìm từ dài nhất trong một chuỗi”.

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”.

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.

Đọc thêm  Giá trị giả trong JavaScript

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