给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回符合要求的最少分割次数。
示例:
输入: "aab"
输出: 1
解释: 进行一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。
解:未ac,代码正确的,时间复杂度有点高。
class Solution {
int min = Integer.MAX_VALUE;
private boolean isPalin(String s) {
int start = 0;
int end = s.length() - 1;
while (start < end) {
if (s.charAt(start) != s.charAt(end)) {
return false;
}
start++;
end--;
}
return true;
}
public int minCut(String s) {
List<String> list = new ArrayList<>();
helper2(list, s, 0);
return min;
}
private void helper2(List<String> list, String s, int start) {
if (start == s.length()) {
min = Math.min(min, list.size() - 1);
return;
}
for (int i = start; i < s.length(); i++) {
String sub = s.substring(start, i + 1);
if (isPalin(sub)) {
list.add(sub);
helper2(list, s, i + 1);
list.remove(list.size() - 1);
}
}
}
}