Chúng tôi bắt buộc phải viết một hàm JavaScript lấy một mảng chuỗi làm đối số đầu tiên và một chuỗi làm đối số thứ hai.
Hàm nên kiểm tra xem chuỗi được chỉ định bởi đối số thứ hai có thể được hình thành bằng cách kết hợp các chuỗi của mảng theo bất kỳ cách nào có thể hay không.
Ví dụ - Nếu mảng đầu vào là -
const arr = ["for","car","keys","forth"];
Và chuỗi là -
const str = "forthcarkeys";
Khi đó, kết quả đầu ra phải là true, vì chuỗi là sự kết hợp của các phần tử ở chỉ số 3, 1 và 2 của mảng.
Ví dụ
Mã cho điều này sẽ là -
const arr = ["for","car","keys","forth"]; const str = "forthcarkeys"; const checkPossibility = (str = '', arr = []) => { let possibilities = arr.reduce(function (r, a) { let p = str.indexOf(a); while (p !== −1) { r.push({ word: a, position: p }); p = str.indexOf(a, p + 1); } return r; }, []); const findRecursively = (i, t) => { let s = t.slice(), j; if (i === possibilities.length) { return !t.join(''); } if (possibilities[i].word.split('').every(function (c, j) { return s[j + possibilities[i].position] !== ''; })) { for (j = 0; j < possibilities[i].word.length; j++) { s[j + possibilities[i].position] = ''; } } return findRecursively(i + 1, s) || findRecursively(i + 1, t); } return findRecursively(0, str.split('')); }; console.log(checkPossibility(str, arr));
Đầu ra
Và đầu ra trong bảng điều khiển sẽ là -
true