131. 分割回文串 javascript实现
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: "aab" 输出: [ ["aa","b"], ["a","a","b"] ]
解法照抄了这个 https://www.cnblogs.com/J1ac/p/9395402.html
基本思路是回溯法,深度优先搜索DFS,递归查找,特殊情况如""
深度优先DFS和广度优先BFS解析参考相关文章
https://blog.csdn.net/zhouziyu2011/article/details/62236006
需要特别注意的地方是因为JS语言特性,result在push(temp)的时候需要对temp进行深拷贝
JS实现深拷贝的方法有很多种,这里使用了最简单的逐个复制,可以对这点进行优化
JS深拷贝相关文章 https://www.cnblogs.com/jiangzilong/p/6513552.html
/** * @param {string} s * @return {string[][]} */ let partition = function(s) { let temp = [] let result = [] function isPalindrome(s,begin,end){ while (begin < end) { if (s.charAt(begin++) !== s.charAt(end--)) return false; } return true; } function copy (array) { let newArray = [] for(let item of array) { newArray.push(item); } return newArray; } function dfs(s,n) { if(n===s.length){ result.push(copy(temp)) return } for(let i = n;i<s.length;i++){ if(isPalindrome(s,n,i)){ let str = s.substr(n,i-n+1) temp.push(str) dfs(s,i+1) temp.pop() } } } if (s === "") { return result; } dfs(s, 0) return result; };