迴文分區DP複雜的問題,我有以下問題:在記憶一步
給定一個字符串s,劃分S使得 分區的每個子是迴文。
返回s的迴文分割所需的最小切割。
我得到了正確的解決方案,但我缺少優化步驟,尤其是DP中需要的記憶步驟。
public int minCut(String a) {
if (isValidPal(a)) {
return 0;
}
return minCut(a, 0, 0);
}
int min = Integer.MAX_VALUE;
private int minCut(String a, int cut, int index) {
// too many cuts already
if(cut >= min) return min;
// out of index
if (index >= a.length()) {
// what is left is a pal
if (isValidPal(a)) {
min = Math.min(min, cut);
return cut;
}
return Integer.MAX_VALUE;
}
int newCut = Integer.MAX_VALUE;
if (isValidPal(a.substring(0, index + 1))) {
// then cut
newCut = minCut(a.substring(index + 1), cut + 1, 0);
}
// continue either way
newCut = Math.min(minCut(a, cut, index + 1), newCut);
return newCut;
}
HashMap<String, Boolean> memo = new HashMap<>();
private boolean isValidPal(String s) {
if(memo.containsKey(s)) {
return memo.get(s);
}
boolean result = true;
for (int i = 0; i < s.length()/2; i++) {
if (s.charAt(i) != s.charAt(s.length() - i - 1)) {
result = false;
break;
}
}
memo.put(s, result);
return result;
}
假設DP =動態編程。你可能想要說明這一點,因爲縮寫非常短,並不是所有廣泛使用的。 – ebyrob
這裏有很多解釋這個確切的問題https://discuss.leetcode.com/category/140/palindrome-partitioning-ii – shash678