題目:30. 串聯(lián)所有單詞的子串
思路:關(guān)鍵在于找到子串的所有組合
方法:先找到第一個位置可能存放的子串敬辣,然后用遞歸的方式繼續(xù)存放到后面
function findSubstring(str, words) {
// 存放結(jié)果
let result = [];
// 記錄數(shù)組的長度岩四,做邊界條件計算
let num = words.length;
// 定義遞歸函數(shù)體
let range = (r, _arr) => {
if (r.length === num) {
result.push(r);
} else {
_arr.forEach((item, index) => {
let tmp = [..._arr];
tmp.splice(index, 1);
range([...r, item], tmp);
})
}
}
// 執(zhí)行遞歸處理
range([], words);
return result.map(item => {
return str.indexOf(item.join(''))
}).filter(item => item !== -1).sort();
}