博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode: Palindrome Partitioning II 解题报告
阅读量:6585 次
发布时间:2019-06-24

本文共 1632 字,大约阅读时间需要 5 分钟。

Palindrome Partitioning II

Given a string s, partition s such that every substring of the partition is a palindrome.

Return the minimum cuts needed for a palindrome partitioning of s.
For example, given s = "aab",
Return 1 since the palindrome partitioning ["aa","b"] could be produced using 1 cut.

SOLUTION 1:

使用DP来解决:

1. D[i]  表示前i 个字符切为回文需要的切割数

2. P[i][j]: S.sub(i-j) is a palindrome.

3. 递推公式: D[i] = Math.min(D[i], D[j] + 1), 0 <= j <= i - 1) ,并且要判断 P[j][i - 1]是不是回文。

4. 注意D[0] = -1的用意,它是指当整个字符串判断出是回文是,因为会D[0] + 1 其实应该是结果为0(没有任何切割),所以,应把D[0] 设置为-1

有个转移函数之后,一个问题出现了,就是如何判断[i,j]是否是回文?每次都从i到j比较一遍?太浪费了,这里也是一个DP问题。

定义函数
P[i][j] = true if [i,j]为回文
那么
P[i][j] = str[i] == str[j] && P[i+1][j-1];

1 public class Solution { 2     public int minCut(String s) { 3         if (s == null || s.length() == 0) { 4             return 0; 5         } 6          7         int len = s.length(); 8          9         // D[i]: 前i 个字符切为回文需要的切割数10         int[] D = new int[len + 1];11         D[0] = -1;12         13         // P[i][j]: S.sub(i-j) is a palindrome.14         boolean[][] P = new boolean[len][len];15         16         for (int i = 1; i <= len; i++) {17             // The worst case is cut character one by one.18             D[i] = i - 1;19             for (int j = 0; j <= i - 1; j++) {20                 P[j][i - 1] = false;21                 if (s.charAt(j) == s.charAt(i - 1) && (i - 1 - j <= 2 || P[j + 1][i - 2])) {22                     P[j][i - 1] = true;23                     D[i] = Math.min(D[i], D[j] + 1);24                 }25             }26         }27         28         return D[len];29     }30 }
View Code

GITHUB:

转载地址:http://nwano.baihongyu.com/

你可能感兴趣的文章
使用JSoup+CSSPath采集和讯网人物信息
查看>>
如何识别 MacBook Pro 机型
查看>>
javascript 图标分析工具
查看>>
深入分析Docker镜像原理
查看>>
从结构struct谈到类class(基于C++实现)
查看>>
Python3环境配置
查看>>
阿里云负载均衡服务
查看>>
小命令 sysdig
查看>>
IT十八掌作业_java基础第五天_静态代码块、类的继承和接口
查看>>
流程控制-for序列、流程控制-for字典
查看>>
Easy APNs Provider的使用
查看>>
搭建mysql集群
查看>>
Gson工具包使用
查看>>
有一个系统修复处于挂起状态,需要重新启动才能完成该修复
查看>>
Ubuntu上安装bind9
查看>>
访问共享提示“服务器存储空间不足,无法处理此命令。”
查看>>
第七章 虚拟化 虚拟机备份 Veeam backup &Replication
查看>>
路由器与交换机的密码恢复
查看>>
Cisco路由器上的IPSec协议(站点到站点的×××)
查看>>
Linux Python详细安装、升级指南
查看>>