Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3661d74

Browse files
committed
add Palindrome partition II
1 parent 98a5a39 commit 3661d74

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
*该题主要解法是DP*
2+
当求解DP(0, i) 时,对于0 <= j < i, 求解dp(0,j)和dp(j+1,i)的最小值。
3+
整体是由小往大的一个递推,整体的复杂度为O(n^2)
4+
不过需要注意的是,因为我们首先得知道字符串整体的回文情况也就是字符串s[i,j]是否是回文。
5+
该过程可以分开在另一个DP中,也可以将其与解DP合并在一起,但是结合实际情况,分开写两个DP会导致TLE,写在同一个DP中会Accept。
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
class Solution {
2+
public:
3+
int minCut(string s) {
4+
const int size = s.size();
5+
if (size <= 1) {
6+
return 0;
7+
}
8+
vector<vector<int>> dp(size, vector<int>(size,1));
9+
int *res = new int[size];
10+
res[0] = 0;
11+
for(int i = 1; i < size; i++) {
12+
res[i] = res[i-1] + 1;
13+
dp[0][i] = s[0] == s[i]? dp[1][i-1] : 0;
14+
if(dp[0][i] == 1) {
15+
res[i] = 0;
16+
}
17+
for(int j = 1; j < i; j++) {
18+
dp[j][i] = s[j] == s[i] ? dp[j+1][i-1] : 0;
19+
if (dp[j][i] == 1) {
20+
int min_j_i = res[j-1] + 1;
21+
if (res[i] > min_j_i) {
22+
res[i] = min_j_i;
23+
}
24+
}
25+
}
26+
}
27+
return res[size-1];
28+
}
29+
};

0 commit comments

Comments
 (0)