131. Palindrome Partitioning [JavaScript]

一、解题思路

  首先对于如何判断回复字符串,这里不再赘述。(可以翻阅之前的题目)

  以’aab’为例,分析的过程如果:

  • 将该字符分割为’a’和’ab’,‘a’是回文字符串,那么就需要再在’ab’找分割点。(是不是发现这里实际上是相同的子问题)将’ab’,拆成’a’和’b’,两个字符串都满足回文字符串,那么第一分割的结果为[‘a’,‘a’,‘b’]。
  • 将该字符串分割为’aa’和’b’,两者都为回文字符串,所以第二次分割结果为[‘aa’, ‘b’]
  • 将该字符串分割为’aab’,不为回文字符串。

  从上述推导过程实际上就是一个深度优先搜索的过程。

二、代码实现

const partition = s => {
  const max = s.length
  const ans = []
  const path = []

  dfs(s, 0, path, ans)
  return ans
  function dfs (s, pos, path, ans) {
    if (pos === max) {
      ans.push([...path])
      return
    }
    for (let i = pos; i < max; i++) {
      if (isPalindrome(s, pos, i)) {
        path.push(s.substring(pos, i + 1))
        dfs(s, i + 1, path, ans)
        path.pop()
      }
    }
  }
}

function isPalindrome (s, i, j) {
  for (let start = i, end = j; start <= end;) {
    if (s[start] === s[end]) {
      start++
      end--
      continue
    }
    return false
  }
  return true
}

  
  ----------------------------

关注「漫谈大前端」
不断成长为一名优秀的前端开发工程师

  ----------------------------
  

  您还可以在这些地方找到我:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值