基础算法之"递归类"

题目: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();
}

你可能感兴趣的:(基础算法之"递归类")