【leetcode】131.分割回文串

53 阅读1分钟

leetcode-131.png

题目简述:找到字符串里面所有的回文串

一般这种要找到所有可能的,基本上都是回溯题目

var partition = function (s) {
    let res = []
    let currentStr = []
    // 判断 [left, right] 是否是回文
    var isPalindrome = function (left, right) {
        while (left < right) {
            if (s[left] !== s[right]) return false
            left++
            right--
        }
        return true
    }
    var backtrack = function (start) {
        if(start >= s.length){
            res.push([...currentStr])
            return
        }
        for (let end = start; end < s.length; ++end) {
            if (isPalindrome(start, end)) {
                currentStr.push(s.slice(start, end + 1))
                backtrack(end + 1)
                currentStr.pop()
            }
        }
    }
    backtrack(0)
    return res
};

对于测试用例 s = 'aab',第一轮得到的结果是['a', 'a', 'b']
此时start = s.length,就会跳出当前递归
开始第二轮递归了,此时start = 0, end = 1,会得到 'aa'