Làm cách nào để tìm tất cả các hoán vị của chuỗi trong JavaScript?
Show Dưới đây là các hoán vị của xâu ABC. Điều này có thể được giải quyết bằng thuật toán đệ quy và câu hỏi được hỏi nhiều nhất trong các cuộc phỏng vấn,
Thuật toán. Quay lui BÀI LIÊN QUANChương trình chuỗi con chung dài nhất trong Javascript Đảo ngược danh sách được liên kết trong Javascript Chuỗi con tăng dần dài nhất trong Javascript Tạo Longest Common Subsequence Program in JavascriptCho một chuỗi ngắn A và một chuỗi dài hơn B. Tìm tất cả các hoán vị của A xảy ra trên B. Chúng tôi giả sử rằng cả hai chuỗi chỉ chứa các ký tự ASCII Ví dụ A = “ B = “______5“ Kết quả = [“cdab”, “abcd”, “dcba”] Giải pháp Brute Force
Triển khai JavaScriptĐộ phức tạp về thời gian của một giải pháp ngây thơ để tạo ra tất cả các hoán vị của một chuỗi ít nhất sẽ là cấp số nhân, cụ thể là O(n. ), trong đó n là độ dài của chuỗi. Điều này là do có n. (n giai thừa) các hoán vị có thể có của một chuỗi có n ký tự. Ví dụ: chuỗi có 4 ký tự thì có 4. = 24 hoán vị và một chuỗi có 5 ký tự có 5. = 120 hoán vị
Độ phức tạp lần này không hiệu quả lắm, đặc biệt đối với các chuỗi lớn hơn, vì số lượng hoán vị tăng rất nhanh với kích thước của chuỗi. Có nhiều thuật toán hiệu quả hơn để tạo các hoán vị có độ phức tạp thời gian thấp hơn, chẳng hạn như thuật toán Heap, có độ phức tạp thời gian là O(n * n. ), hoặc thuật toán Steinhaus–Johnson–Trotter, có độ phức tạp thời gian là O(n * n). Các thuật toán này có thể phù hợp hơn để tạo hoán vị của các chuỗi lớn hơn Hãy thử chạy triển khai JS này khi một. chiều dài >= 10 và có thể bạn sẽ gặp lỗi hết thời gian chờ thuật toán tối ưu hóaĐể tối ưu hóa thuật toán của chúng tôi, chúng tôi có thể thực hiện một cái gì đó tương tự như thuật toán Rabin-Karp. Cũng giống như nhiều thuật toán thời gian chạy hàm mũ, chẳng hạn như thuật toán dãy Fibonacci nổi tiếng, chúng ta có thể cải thiện thuật toán này bằng cách triển khai bảng băm nền toán học
Điều này cho phép chúng ta gán mỗi ký tự cho một số nguyên tố, trong đó số nguyên tố là khóa băm, tổng của tất cả các hoán vị của các khóa ký tự chuỗi ngắn hơn là bằng nhau. Bây giờ, điều duy nhất còn lại là kiểm tra xem tổng các chuỗi con trên chuỗi dài hơn có bằng tổng của chuỗi sắp xếp không Triển khai mã giả
Bỏ các hằng số, chúng tôi hoàn thành nó trong thời gian tuyến tính – O(b). Lưu ý rằng các hằng số, trong trường hợp này, có thể có ảnh hưởng đáng kể đến hiệu suất của thuật toán, nhưng dù sao, hiệu suất của thuật toán này sẽ tốt hơn nhiều so với thuật toán ngây thơ của chúng ta Làm cách nào để tìm hoán vị trong JavaScript?let permArr = []; . chia(""); . chiều dài; . mối nối(i, 1); .
Làm cách nào để lấy tất cả các đảo chữ của một chuỗi JavaScript?Đây là thuật toán. . Tạo hai biến start và end Đầu tiên lưu trữ tất cả các ký tự của p trong bản đồ băm với giá trị là số lần xuất hiện trong khi kết thúc < s. chiều dài nếu hashMap của s[end] lớn hơn 0, hãy trừ 1 từ nó và tăng end. . khác nếu bắt đầu bằng với kết thúc tăng cả bắt đầu và kết thúc Làm cách nào để tạo hoán vị của một mảng trong js?Lấy phần tử đầu tiên của mảng (1) và đặt nó sang một bên. Lấy các phần tử còn lại (2 và 3) và thực hiện một hoán vị với thứ tự ban đầu (1, 2, 3) và một phần tử khác với các phần tử còn lại ban đầu (2 , 3), nhưng đổi chỗ (3, 2). Vì vậy, bây giờ chúng ta có hai hoán vị. [1, 2, 3] và [1, 3, 2] |