文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。

返回符合要求的最少分割次数

示例:
输入: "aab"
输出: 1
解释: 进行一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-partitioning-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • dp[i]表示到 i 为止的子串最少需要分割多少次
  • 如果一个子串为回文串,dp[i] = 0
  • 如果不是,遍历所有的 j (j <= i),如果s[j,i]是回文串,dp[i] = min(dp[i], dp[j-1]+1)

28 / 29 个通过测试用例

# 超时例子
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
class Solution {public:int minCut(string s) {int i,j,n = s.size();vector<int> dp(n,0);if(s.size()<=1)return 0;for(i = 0; i < n; ++i)dp[i] = i;for(i = 1; i < n; ++i){for(j = i; j > 0; --j){if(ispalindrome(s,0,i))dp[i] = 0;else if(ispalindrome(s, j, i))dp[i] = min(dp[i], dp[j-1]+1);}}return dp[n-1];}bool ispalindrome(string& s, int l, int  r){while(l < r){if(s[l++]!=s[r--])return false;}return true;}
};
  • 预先预处理得到所有可能的区间是否是是回文串
  • 参考:LeetCode 5. 最长回文子串(动态规划)
class Solution {public:int minCut(string s) {int i,j,len,n = s.size();vector<int> dp(n,0);vector<vector<bool>> ispalind(n,vector<bool>(n,false));if(s.size()<=1)return 0;for(i = 0; i < n; ++i){dp[i] = i;ispalind[i][i] = true;if(i < n-1 && s[i]==s[i+1])ispalind[i][i+1] = true;}for(len = 1; len < n; ++len){for(i = 0; i < n-len; ++i){if(ispalind[i][i+len-1] && i-1>=0 && s[i-1]==s[i+len])//是回文串ispalind[i-1][i+len] = true;}}for(i = 1; i < n; ++i){for(j = i; j > 0; --j){if(ispalind[0][i])dp[i] = 0;else if(ispalind[j][i])dp[i] = min(dp[i], dp[j-1]+1);}}return dp[n-1];}
};

124 ms 7.4 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 132. 分割回文串 II(DP)相关推荐

  1. 132. 分割回文串 II

    链接:132. 分割回文串 II 题解:https://leetcode-cn.com/problems/palindrome-partitioning-ii/solution/xiang-tong- ...

  2. leetcode 131. 分割回文串(dp+回溯)

    给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 .返回 s 所有可能的分割方案. 回文串 是正着读和反着读都一样的字符串. 示例 1: 输入:s = "aab&quo ...

  3. LeetCode 1278. 分割回文串 III

    截止到目前我已经写了 600多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载 下载链接:https://pan.baidu.com/s/1hj ...

  4. LeetCode 131. 分割回文串【字符串,回溯算法】

    131. 分割回文串 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 .返回 s 所有可能的分割方案. 回文串 是正着读和反着读都一样的字符串. 示例 1: 输入:s = &q ...

  5. LeetCode 1278. 分割回文串 III(区间DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个由小写字母组成的字符串 s,和一个整数 k. 请你按下面的要求分割字符串: 首先,你可以将 s 中的部分字符修改为其他的小写英文字母. 接着,你需 ...

  6. 【LeetCode - 131】分割回文串(dp,dfs)

    题目链接:https://leetcode-cn.com/problems/palindrome-partitioning/ 题目: 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. ...

  7. leetcode132. 分割回文串 II

    给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回符合要求的最少分割次数. 示例: 输入: "aab" 输出: 1 解释: 进行一次分割就可将 s 分割成 [ ...

  8. LeetCode 131. 分割回文串(回溯)

    文章目录 1. 题目 2. 回溯 1. 题目 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: ...

  9. leetcode 131. 分割回文串 思考分析

    题目 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 思考 问题可以分为两个子问题:1.判断回文串2.分割数组 判断回文串 bool isPalin ...

最新文章

  1. 计算机视觉基本原理——RANSAC
  2. asp.net 在 Ngnix 服务器 中配置攻略
  3. log4j配置文件详解
  4. 玩“剪刀石头布“的脑机!密歇根大学开发由大脑意识精密控制的假肢
  5. String str =new String(“abc“)和 String str = “abc“的比较
  6. POJ 1651 Multiplication Puzzle 区间dp(水
  7. type pdf c语言课程设计,c语言课程设计-.pdf
  8. python编程项目中遇到的困难_python开发中遇到的常见问题,你们又是如何解决的呢?如何快速的学好python,有没有什么小技巧?...
  9. windows performance
  10. Jquery封装幻灯片效果
  11. php时钟制作心得,电子钟课程设计心得
  12. 15 使用计算机应遵守行业道德规范,初中信息技术会考试题 -
  13. 高通CPU处理器解析
  14. kafka之重新分配分区副本kafka-reassign-partitions命令
  15. 那些很棒的 blog and site 优秀的博客和网站推荐
  16. C语言的stdio.h文件
  17. 详解常用的Batch Norm、Group Norm,Layer norm、Instance Norm
  18. 五款最棒的Go语言开发工具?
  19. matlab基本知识(入门)
  20. SCSI/iSCSI及SAS、NAS、SAN的基本介绍

热门文章

  1. steam一键授权工具_半个东的时间让你省了一个亿 Steam免费游戏一键领取
  2. uboot源码——内核启动分析
  3. dhcp failover linux,ISC dhcp failover的mclt参数很重要啊
  4. php 字符串的比较大小,php怎么比较两个字符串的大小
  5. Maven配置项目依赖使用本地仓库的方法汇总
  6. hihoCoder #1143 : 骨牌覆盖问题·一
  7. Java学习笔记之:Java引用数据类型之字符串
  8. Linux中使用GDB调试NS2
  9. 小问题,对递归重复调用的改进,一起来分享
  10. 标准C语言库 Glibc 2.15