题目:30. 串联所有单词的子串
思路:关键在于找到子串的所有组合
方法:先找到第一个位置可能存放的子串,然后用递归的方式继续存放到后面
function findSubstring(str, words) {
// 存放结果
let result = [];
// 记录数组的长度,做边界条件计算
let num = words.length;
// 定义递归函数体
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);
})
}
}
// 执行递归处理
range([], words);
return result.map(item => {
return str.indexOf(item.join(''))
}).filter(item => item !== -1).sort();
}
网友评论