[Leetcode] 131. Palindrome Partitioning β
Problem β
μͺΌκ°μ λμ¬ μ μλ ν°λ¦°λ둬μ κ²½μ°μ μλ₯Ό ꡬνλ λ¬Έμ
Solution β
input: 'aaabbc'
output: [
['a', 'a', 'a', 'b', 'b', 'c'],
['a', 'a', 'a', 'bb', 'c'],
['a', 'aa', 'b', 'b', 'c'],
['a', 'aa', 'bb', 'c'],
['aa', 'a', 'b', 'b', 'c'],
['aa', 'a', 'bb', 'c'],
['aaa', 'b', 'b', 'c'],
['aaa', 'bb', 'c'],
]
μ ν μ€νΈμΌμ΄μ€λ₯Ό μ λ ₯νκ³ λλ Έμλ, κ°μ₯ μμ μ¬μ΄μ¦μ ν°λ¦°λ둬λΆν° ꡬν΄μ§κ³ , μ€λ₯Έμͺ½μ κ°μ μμ λ¨μλΌκ³ νμλ μ μ λ¨μκ° μ»€μ§λ μμλ‘ λ°°μΉλκ³ μλκ²μ μ μμλ€. μ΄ ν¨ν΄μ μ΄μ©ν΄μ DFSλ₯Ό ꡬννλ©΄ λλ€.
μμ λ¨μλ‘ μͺΌκ°λ©΄μ κΉμ λμ€λ‘ μ§μ νλ€. λͺ¨λ μμλ₯Ό κ²μ¬νλ€λ©΄ ν°λ¦°λ둬μ κ°μ μ μ₯νλ€. μ΄λ μμμ νΉμ λ¬Έμμ΄μ κ²μ¬ν λ ν°λ¦°λλ‘¬μ΄ μλλΌλ©΄ κΉμ λμ€λ‘ λ€μ΄κ°μ§ λͺ»νλλ‘ μ‘°κ±΄μ²λ¦¬λ₯Ό νλ€. μ΅μ’ λμ€μμ ν°λ¦°λ둬μΌλ‘ κ²μ¬λ κ°(λ°°μ΄)μ μ΄μ λμ€μμλ ν°λ¦°λ둬μ΄κΈ° λλ¬Έμ μ΄μ λμ€μμ κ²μ¬ν λ¬Έμμ κΈΈμ΄λ₯Ό λλ €κ°λ©΄μ κ²μ¬νλλ‘ νλ€.
JS Code β
/**
* @param {string} s
* @return {string[][]}
*/
var partition = function (s) {
const isPalindrome = str =>
Array.from(str)
.reverse()
.every((c, i) => c === str[i])
let answer = []
function dfs(left = 0, arr = []) {
if (left === s.length) answer.push([...arr])
for (let right = left + 1; right <= s.length; right++) {
const substr = s.substring(left, right)
if (!isPalindrome(substr)) continue
arr.push(substr)
dfs(right, arr)
arr.pop()
}
}
dfs()
return answer
}