题目链接 : https://leetcode-cn.com/problems/palindrome-partitioning-ii/

题目描述:

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

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

示例:

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

思路:

动态规划,

思路一: 自顶向下

import functools
class Solution:
@functools.lru_cache(None)
def minCut(self, s: str) -> int:
if s == s[::-1]:
return 0
ans = float("inf")
for i in range(1, len(s) + 1):
if s[:i] == s[:i][::-1]:
ans = min(self.minCut(s[i:]) + 1, ans)
return ans

思路二: 自底向上

可以通过5. 最长回文子串(题解链接)和131. 分割回文串(题解链接)看一下关于dp的写法

再用数组min_s记录到字符串到i位置需要分割次数.

class Solution:
def minCut(self, s: str) -> int:
min_s = list(range(len(s)))
n = len(s)
dp = [[False] * n for _ in range(n)]
for i in range(n):
for j in range(i+1):
if s[i] == s[j] and (i - j < 2 or dp[j + 1][i - 1]):
dp[j][i] = True
# 说明不用分割
if j == 0:
min_s[i] = 0
else:
min_s[i] = min(min_s[i], min_s[j - 1] + 1)
return min_s[-1]

java

class Solution {
public int minCut(String s) {
int n = s.length();
int[] min_s = new int[n];
boolean[][] dp = new boolean[n][n];
for (int i = 0; i < n; i++) {
min_s[i] = i;
for (int j = 0; j <= i; j++) {
if (s.charAt(i) == s.charAt(j) && (i - j < 2 || dp[j + 1][i - 1])) {
dp[j][i] = true;
min_s[i] = j == 0 ? 0 : Math.min(min_s[i], min_s[j - 1] + 1);
}
}
}
return min_s[n - 1];
}
}

最新文章

  1. niginx代理配置
  2. OpenNURBS 3DM Viewer
  3. mac+php+xdebug+phpstorm在苹果下配置xdebug一波三折
  4. android系统中自带的一些ThemeStyle
  5. paper 113:Bhattacharyya distance
  6. linux下验证码无法显示:Could not initialize class sun.awt.X1 解决方案
  7. 房间声学原理与Schroeder混响算法实现
  8. Todolist
  9. allegro飞线隐藏
  10. yii2 ./yii command : No such file or directory
  11. 职责链模式vs状态模式区别
  12. div模块变灰
  13. 使用多线程完成Socket
  14. js获取当前页面的URL并且截取?之后的数据,返回json
  15. MQ队列管理器搭建(二)
  16. mqtt服务器apollo的搭建和测试工具paho的使用
  17. VirtualBox 扩展包卸载或安装失败(VERR_ALREADY_EXISTS)(转)
  18. Dubbo浅谈
  19. jira与svn的调研
  20. Centos 创建 docker项目

热门文章

  1. 如何使用Android Studio与夜神模拟器开发调试
  2. k8-s存储
  3. python 输出一个随机数
  4. 阿里第一天——maven学习
  5. 从Java中的length和length()开始
  6. springcloud(十七):服务网关 Spring Cloud GateWay 熔断、限流、重试
  7. Spring4配置文件模板
  8. legend2---数据字段没有默认值错误:SQLSTATE[HY000]: General error: 1364 Field &#39;h_21_injury_limit&#39; doesn&#39;t have a default value
  9. CListCtrl死锁的问题
  10. Sensor在内核中的驱动框架【转】