题目:
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回符合要求的最少分割次数。
示例:
输入: “aab” 输出: 1 解释: 进行一次分割就可将 s 分割成 [“aa”,“b”] 这样两个回文子串。
分析:
可以用递归的方法,讲每次分割后得到的子串当做新的字符串来分割,最小分割数加1,如aabb,先分割成a|abb,abb便成新的字符串,这样便可以用到递归;
public int minCut(String s) {
boolean[][] dp = new boolean[s.length()][s.length()];
int[] min = new int[s.length()];
min[0] = 0;
for (int i = 1; i < s.length(); i++) {
int temp = Integer.MAX_VALUE;
for (int j = 0; j <= i; j++) {
if (s.charAt(j) == s.charAt(i) && (j + 1 > i - 1 || dp[j + 1][i - 1])) {
dp[j][i] = true;
if (j == 0) {
temp = 0;
} else {
temp = Math.min(temp, min[j - 1] + 1);
}
}
}
min[i] = temp;
}
return min[s.length() - 1];
}