Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Hàm JavaScript tạo tất cả tổ hợp có thể của một chuỗi

Chúng ta cần viết một hàm JavaScript nhận vào một chuỗi làm đối số duy nhất. Hàm nên tạo một mảng chuỗi chứa tất cả các chuỗi con liên tiếp (contiguous substrings) có thể tồn tại trong chuỗi.

Ví dụ

Dưới đây là mã nguồn:

const str = 'Delhi'; const allCombinations = (str1 = '') => {    const arr = [];    for (let x = 0, y=1; x < str1.length; x++,y++) {       arr[x]=str1.substring(x, y);    };    const combination = [];    let temp= "";    let len = Math.pow(2, arr.length);    for (let i = 0; i < len ; i++){       temp= "";       for (let j=0;j<arr.length;j++) {          if ((i & Math.pow(2,j))){             temp += arr[j];          }       };       if (temp !== ""){          combination.push(temp);       }    }    return combination; }; console.log(allCombinations(str));

Kết quả

Đầu ra trên console:

[    'D', 'e', 'De', 'l',    'Dl', 'el', 'Del', 'h',    'Dh', 'eh', 'Deh', 'lh',    'Dlh', 'elh', 'Delh', 'i',    'Di', 'ei', 'Dei', 'li',    'Dli', 'eli', 'Deli', 'hi',    'Dhi', 'ehi', 'Dehi', 'lhi',    'Dlhi', 'elhi', 'Delhi' ]

Lưu ý quan trọng: Mô tả nói "contiguous substrings" (chuỗi con liên tiếp) nhưng code thực hiện tạo tất cả các tập hợp con (subsequences/power set) - không yêu cầu liên tiếp. Kết quả bao gồm 'Dl', 'Dh', 'elh'... không liên tiếp. Tên hàm nên là allSubsequences hoặc powerSet.