leetcode132-分割回文串 II
- 双重dp
首先需要用dp去记录s中回文子串的信息,找出所有的回文子串,方法如上一题。
然后对子串进行拆分,拆分的时候需要用到dp。
对于下标为i这一点,需要去遍历[0, i]
这些部分,找出所有以i点结束的回文子串,计算相应的拆分数量,取较小值。
由于最后返回的是分割数量而不是拆分后字符串的数量,所以返回结果为f[n]-1
class Solution {
public int minCut(String s) {
int n = s.length(), f[] = new int[n+1];
boolean dp[][] = new boolean[n][n];
for(int i = n-1; i >= 0; i--){
for(int j = i; j < n; j++){
if(i > j-2) dp[i][j] = s.charAt(i) == s.charAt(j);
else dp[i][j] = dp[i+1][j-1] && s.charAt(i) == s.charAt(j);
}
}
Arrays.fill(f, Integer.MAX_VALUE);
f[0] = 0;
for(int i = 0; i < n; i++){
for(int j = i; j >= 0; j--){
if(dp[j][i]) f[i+1] = Math.min(f[i+1], f[j]+1);
}
}
return f[n]-1;
}
}
本文作者:xzh-yyds
本文链接:https://www.cnblogs.com/xzh-yyds/p/16594880.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步