首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

leetcode刷题指南之PalindromePartitioningII

题目分析

给一个字符串s,问最少切几下使得切出的子串都是回文串。比如,s=,那么只要切一下变成[,]就可以。

。。。。。。。。。。。

咳咳,

继续解题

解题思路

先从简单情况考虑起,如果s本身就是一个回文串,那么答案显然是0。 如果s不是回文串,那至少要切一下。

考虑切的第一块,即包含第一个字母的那一块。这个时候我们可能会想到贪心取最长的一个,但贪心是不对的,考虑一个例子:,如果第一个贪心的话,最远可以切到,需要两下,++,一共两下,但是我们可以切成+,即只需要一下。

因此我们去枚举第一个切分的位置,我们就得到了一个回文串,和剩下的子串,对于剩下的子串又是一个相同的问题:最少要切多少下?因此,我们就得到了一个更小的子问题,也就是动态规划的标志。

令dp[i]代表[0,i]要最少切多少下才能满足条件,枚举前面切分的位置j,那么dp[i]=min(dp[i],dp[j-1]+1),当然,子串(i,j)要是一个回文串。

下面以作为例子:

代码示例

作者:东大ACM退役队伍

编辑:刘凯旋

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180910B0BA7700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券