Đảo ngược chuỗi sử dụng đệ quy javascript

Viết, Chạy & Chia sẻ mã Javascript trực tuyến bằng trình biên dịch trực tuyến JS của OneCompiler miễn phí. Đây là một trong những trình biên dịch trực tuyến mạnh mẽ, giàu tính năng dành cho ngôn ngữ Javascript. Bắt đầu với trình soạn thảo Javascript của OneCompiler thật dễ dàng và nhanh chóng. Trình chỉnh sửa hiển thị mã soạn sẵn mẫu khi bạn chọn ngôn ngữ là Javascript và bắt đầu viết mã

Javascript [JS] là ngôn ngữ lập trình hướng đối tượng tuân theo Tiêu chuẩn tập lệnh ECMA. Javascript là cần thiết để thiết kế hành vi của các trang web

  • Mã nguồn mở
  • Ngôn ngữ được biên dịch đúng lúc
  • Được nhúng cùng với HTML và làm cho các trang web trở nên sống động
  • Ban đầu được đặt tên là LiveScript
  • Có thể thực thi trong cả trình duyệt và máy chủ có các công cụ Javascript như V8 [chrome], SpiderMonkey [Firefox], v.v.

sự định nghĩa biến

KeywordDescriptionScopevarVar dùng để khai báo biến [cách khai báo biến cũ] Hàm hoặc scopeletlet toàn cục cũng dùng để khai báo biến [cách mới] Scopeconst toàn cục hoặc khối dùng để khai báo giá trị const. Sau khi giá trị được gán, nó không thể được sửa đổi Phạm vi toàn cầu hoặc khối

Backtick Chuỗi

nội suy

let greetings = `Hello ${name}`

Chuỗi nhiều dòng

const msg = `
hello
world!
`

Mảng

Một mảng là một tập hợp các mục hoặc giá trị

cú pháp

let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];

Ví dụ

let mobiles = ["iPhone", "Samsung", "Pixel"];

// accessing an array
console.log[mobiles[0]];

// changing an array element
mobiles[3] = "Nokia";

chức năng mũi tên

Arrow Functions giúp các nhà phát triển viết mã một cách ngắn gọn, được giới thiệu trong ES6.
Các hàm mũi tên có thể được viết theo nhiều cách. Dưới đây là một số cách để sử dụng chức năng mũi tên nhưng nó cũng có thể được viết theo nhiều cách khác.

cú pháp

[] => expression

Ví dụ

const numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
const squaresOfEvenNumbers = numbers.filter[ele => ele % 2 == 0]
                                    .map[ele => ele ** 2];
console.log[squaresOfEvenNumbers];

hủy cấu trúc

Mảng

let [firstName, lastName] = ['Foo', 'Bar']

Các đối tượng

let {firstName, lastName} = {
  firstName: 'Foo',
  lastName: 'Bar'
}

còn lại[. ] nhà điều hành

________số 8

Truyền đi[. ] nhà điều hành

//Object spread
const post = {
  ...options,
  type: "new"
}
//array spread
const users = [
  ...adminUsers,
  ...normalUsers
]

Chức năng

const msg = `
hello
world!
`
0

vòng lặp

1. Nếu

IF được sử dụng để thực thi một khối mã dựa trên một điều kiện

cú pháp

const msg = `
hello
world!
`
1

2. Nếu khác

Phần khác được sử dụng để thực thi khối mã khi điều kiện không thành công

cú pháp

const msg = `
hello
world!
`
2

3. Công tắc điện

Switch được sử dụng để thay thế các câu lệnh If-Else lồng nhau

cú pháp

const msg = `
hello
world!
`
3

4. Vì

Vòng lặp for được sử dụng để lặp lại một tập hợp các câu lệnh dựa trên một điều kiện

const msg = `
hello
world!
`
4

5. Trong khi

While cũng được sử dụng để lặp lại một tập hợp các câu lệnh dựa trên một điều kiện. Thông thường, while được ưu tiên khi không biết trước số lần lặp

const msg = `
hello
world!
`
5

6. Làm trong khi

Do-while cũng được sử dụng để lặp lại một tập hợp các câu lệnh dựa trên một điều kiện. Nó chủ yếu được sử dụng khi bạn cần thực hiện các câu lệnh ít nhất một lần

const msg = `
hello
world!
`
6

Các lớp học

ES6 đã giới thiệu các lớp cùng với các khái niệm OOPS trong JS. Lớp tương tự như một chức năng mà bạn có thể nghĩ giống như một loại khuôn mẫu sẽ được gọi khi bạn khởi tạo lớp

Đảo ngược một chuỗi không phải là hiếm trong quá trình phát triển và khá phổ biến đối với các câu hỏi phỏng vấn cấp đầu vào. Với JavaScript, chúng ta có nhiều cách để đảo ngược một chuỗi. Chúng ta có thể sử dụng kết hợp các phương thức chuỗi _______ 60 cũng như các phương thức mảng _______ 61 và

let [firstName, lastName] = ['Foo', 'Bar']
2 [vì cuối cùng các chuỗi là các mảng ký tự]

Chúng ta cũng có thể đảo ngược một chuỗi bằng các hàm lặp [vòng lặp] hoặc hàm đệ quy của riêng mình

Trong hướng dẫn này, chúng ta sẽ xem xét một số cách để đảo ngược chuỗi trong JavaScript

Sử dụng các phương thức tích hợp để đảo ngược chuỗi - split[], reverse[] và join[]

Cách đơn giản nhất để đảo ngược một chuỗi trong JavaScript là tách một chuỗi thành một mảng,

let [firstName, lastName] = ['Foo', 'Bar']
1 nó và
let [firstName, lastName] = ['Foo', 'Bar']
2 nó trở lại thành một chuỗi. Với ES6, điều này có thể được rút ngắn và đơn giản hóa thành

Ở đây, Cú pháp trải rộng được sử dụng để phân tách chuỗi thành một mảng và có chức năng tương đương với phương thức

let [firstName, lastName] = ['Foo', 'Bar']
0 mà bạn cũng có thể sử dụng thay thế

Để hiểu tại sao tất cả chúng hoạt động cùng nhau, hãy xem tổng quan về chức năng của từng chức năng

tách ra[]

Phương thức

let [firstName, lastName] = ['Foo', 'Bar']
0 trả về một mảng chuỗi mới sau khi tách một chuỗi bằng dấu tách được cung cấp

const msg = `
hello
world!
`
7

const msg = `
hello
world!
`
84 xác định nơi chuỗi phân tách thành một phần tử trong mảng kết quả. Chúng ta có thể xác định số lượng phần tử mảng với tham số
const msg = `
hello
world!
`
85. Khi chúng ta sử dụng phương thức
let [firstName, lastName] = ['Foo', 'Bar']
0 với chuỗi rỗng,
const msg = `
hello
world!
`
87, chuỗi sẽ được chia theo từng ký tự. Nó sẽ hữu ích khi chúng ta chuyển đổi chuỗi của mình thành một mảng các ký tự riêng lẻ

Một lần nữa, bạn có thể sử dụng toán tử trải rộng để đạt được kết quả tương tự. Toán tử trải rộng là một toán tử JavaScript hoạt động trên các lần lặp như mảng, chuỗi và đối tượng. Chúng ta có thể sao chép và nối các đối tượng và mảng bằng toán tử trải rộng

Khi toán tử trải rộng được sử dụng với một chuỗi, chuỗi đó được chuyển đổi thành một chuỗi ký tự

Ghi chú. Trong khi tách các ký tự UTF-16, hãy sử dụng toán tử trải rộng thay vì phương thức

let [firstName, lastName] = ['Foo', 'Bar']
0

đảo ngược[]

let [firstName, lastName] = ['Foo', 'Bar']
1 trả về một mảng bị đảo ngược, tại chỗ. Điều đó có nghĩa là - kết quả là mảng ban đầu bị đảo ngược thay vì một bản sao

Tuy nhiên, bạn không cần gán kết quả cho một biến mới, chúng tôi thường làm để thay đổi tên biến thành một tên mang tính biểu thị hơn

tham gia[]

Phương thức

let [firstName, lastName] = ['Foo', 'Bar']
2 nối các phần tử của một mảng và trả về một chuỗi. Chúng tôi cũng có thể chỉ định một
const msg = `
hello
world!
`
84, là tùy chọn, để nối các phần tử. Khi chúng ta sử dụng dấu phân cách mặc định, các phần tử sẽ được phân tách bằng dấu phẩy trong chuỗi. Sử dụng một chuỗi rỗng làm dấu phân cách sẽ nối các phần tử mảng và trả về dưới dạng một chuỗi như bình thường

Kết hợp các phương thức tích hợp để đảo ngược chuỗi

Với tất cả những điều đó trong tâm trí - cách những thứ này hoạt động cùng nhau trở nên trực quan

Hoặc, bạn có thể rút ngắn nó xuống

Đoạn mã trên dẫn đến

const msg = `
hello
world!
`
8

Sử dụng vòng lặp for để đảo ngược chuỗi

Với vòng lặp for, chúng ta có thể lặp qua từng ký tự trong chuỗi. Bắt đầu từ cuối chuỗi đến đầu chuỗi - chúng ta có thể liên tục nối các ký tự vào một chuỗi mới và do đó tạo thành một chuỗi đảo ngược

let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
3

Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó

Ở đây, chúng tôi đã tạo một chuỗi rỗng,

let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
32, để giữ chuỗi bị đảo ngược. Chỉ số chuỗi giống như chỉ số mảng, chúng bắt đầu từ 0. Do đó, chúng tôi bắt đầu vòng lặp từ một vòng nhỏ hơn độ dài của chuỗi [nhặt ký tự
let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
33] và lặp cho đến khi bộ đếm của chúng tôi về 0 [với ký tự
let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
34]

Biến

let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
32 nối các phần tử của chuỗi

Chạy mã cho chúng tôi đầu ra này

const msg = `
hello
world!
`
8

Sử dụng đệ quy để đảo ngược chuỗi

Đệ quy là một quá trình mà một hàm gọi chính nó. Tuy nhiên, một chức năng gọi chính nó có thể kết thúc việc gọi chính nó vô tận và quá trình sẽ không bao giờ kết thúc nếu không có điều kiện thoát. Do đó, chúng tôi cung cấp một điều kiện, cụ thể là điều kiện cơ sở, để kết thúc hành vi đệ quy của hàm

Chúng ta có thể sử dụng đệ quy để giải quyết các vấn đề bằng cách viết rất ít dòng mã mà không gặp rắc rối khi lặp lại. Tuy nhiên, quá trình này có thể chậm nếu độ sâu đệ quy cao

Cú pháp của một hàm đệ quy chung trông như thế này

let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
9

Khi hàm

let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
36 được gọi, trước tiên, hàm này sẽ kiểm tra một số điều kiện và nếu được đánh giá là
let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
37 - hàm sẽ tự gọi. Quá trình này sau đó được lặp lại, một lần nữa và một lần nữa. Khi điều kiện không thành công, đệ quy bị dừng và hàm trả về một giá trị

Chúng ta có thể sử dụng đệ quy để đảo ngược một chuỗi trong JavaScript bằng một số phương thức chuỗi như

let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
38 và
let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
39

Phương thức

let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
38 trích xuất một phần của chuỗi. Chúng ta có thể chuyển các chỉ số bắt đầu và kết thúc trong phương thức dưới dạng tham số. Nếu chỉ chỉ mục bắt đầu được cung cấp cho phương thức - nó sẽ trích xuất chuỗi từ chỉ mục đó cho đến chỉ mục cuối cùng

Tuy nhiên, khi chúng tôi cung cấp cả chỉ mục bắt đầu và chỉ mục kết thúc, nó sẽ trích xuất chuỗi từ chỉ mục bắt đầu nhưng không bao gồm chỉ mục kết thúc

Phương thức

let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
39 trích xuất ký tự được lập chỉ mục từ một chuỗi. Nó trả về một chuỗi mới bao gồm ký tự. Một ví dụ về phương pháp được hiển thị dưới đây

Đối với hàm đệ quy của chúng tôi - trước tiên chúng tôi kiểm tra xem chuỗi có trống làm điều kiện cơ sở không. Sau một loạt các cuộc gọi đệ quy, chuỗi sẽ trở nên trống rỗng và quá trình đệ quy sẽ kết thúc. Bên trong hàm

let [firstName, lastName] = ['Foo', 'Bar']
1, hàm đệ quy
let [firstName, lastName] = ['Foo', 'Bar']
1 được cung cấp
const msg = `
hello
world!
`
84 làm tham số của nó

Phương thức

let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
39 được nối với hàm
let [firstName, lastName] = ['Foo', 'Bar']
1 trong câu lệnh return

let mobiles = ["iPhone", "Samsung", "Pixel"];

// accessing an array
console.log[mobiles[0]];

// changing an array element
mobiles[3] = "Nokia";
8

Trong lần gọi đệ quy đầu tiên,

const msg = `
hello
world!
`
87 sẽ cho kết quả là
const msg = `
hello
world!
`
88. Trong lần gọi thứ hai,
const msg = `
hello
world!
`
89 sẽ cho kết quả là
let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
90. Tương tự như vậy, lời gọi đệ quy cuối cùng,
let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
91 sẽ trả về một
let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
92

Bây giờ việc thực thi phần

let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
93 đã kết thúc và đệ quy sẽ quay trở lại độ sâu của nó. Ở lần gọi cuối cùng, chuỗi
let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
33 được thêm vào
let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
95, kết quả là chuỗi
let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
33

Tiếp theo, lệnh gọi hàm di chuyển lên trên một bước khi chuỗi

let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
97 được thêm vào
let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
98. Nó làm cho chuỗi
let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
99. Tương tự như vậy,
let mobiles = ["iPhone", "Samsung", "Pixel"];

// accessing an array
console.log[mobiles[0]];

// changing an array element
mobiles[3] = "Nokia";
80 được thêm vào với
let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
99 và nó trở thành
let mobiles = ["iPhone", "Samsung", "Pixel"];

// accessing an array
console.log[mobiles[0]];

// changing an array element
mobiles[3] = "Nokia";
82. Tương tự, độ sâu đệ quy được duyệt lên trên và cuối cùng nó trả về chuỗi
let mobiles = ["iPhone", "Samsung", "Pixel"];

// accessing an array
console.log[mobiles[0]];

// changing an array element
mobiles[3] = "Nokia";
83

const msg = `
hello
world!
`
8

Phần kết luận

Trong bài viết này, chúng tôi đã thảo luận về cách đảo ngược một chuỗi. Chúng tôi đã sử dụng các phương thức tích hợp sẵn

let [firstName, lastName] = ['Foo', 'Bar']
0,
let [firstName, lastName] = ['Foo', 'Bar']
1 và
let [firstName, lastName] = ['Foo', 'Bar']
2, toán tử trải rộng, tạo vòng lặp
let mobiles = ["iPhone", "Samsung", "Pixel"];

// accessing an array
console.log[mobiles[0]];

// changing an array element
mobiles[3] = "Nokia";
87 để tạo chuỗi đảo ngược mới và hàm đệ quy sử dụng
let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
38 và
let arrayName = [value1, value2,..etc];
// or
let arrayName = new Array["value1","value2",..etc];
39, tất cả đều tạo ra kết quả giống nhau

Có thể đảo ngược một chuỗi đã cho bằng cách sử dụng đệ quy không?

Giải thích. Hàm đệ quy [đảo ngược] lấy con trỏ chuỗi [str] làm đầu vào và gọi chính nó với vị trí tiếp theo tới con trỏ đã truyền [str+1] . Đệ quy tiếp tục theo cách này khi con trỏ đến '\ 0', tất cả các hàm được tích lũy trong ngăn xếp in ký tự tại vị trí đã truyền [str] và trả về từng cái một.

Làm cách nào để đảo ngược từng từ của chuỗi trong JavaScript?

Đảo ngược mọi từ trong một chuỗi .
hãy đảo ngượcWordArr = str. tách ra[" "]
bản đồ [từ => từ. tách ra[""]. đảo ngược[]. tham gia[""]];
hãy đảo ngượcWordArr = str. tách ra[" "]. bản đồ [từ => từ. tách ra[""]. đảo ngược[]. tham gia[""]];
trả về đảo ngượcWordArr. tham gia[" "];

Làm cách nào để đảo ngược một mảng bằng đệ quy trong JavaScript?

Đây là phương trình đệ quy. reverseArray[inputArray, i, j] = reverseArray[inputArray, i+1, j-1] + hoán đổi[inputArray[i], inputArray[j]]. Recursion will terminate when leftIndex >= rightIndex.

Chủ Đề