132. Palindrome Partitioning II
2017-09-06 17:12
323 查看
初始化技巧:
在做字符串的dp时,对一个长度为n的字符串,往往要开n+1的空间,把0那一位留出来。因为定义前i个字符,自然分为前0个字符,前1个字符,前n个字符。前0的空串不能忽略,空串很重
要, 很多的结果是从空串来的。
class Solution { public: int minCut(string s) { int length = s.length(); if(length <= 0) return 0;
//flag[i][j]表示字符串中第i个位置到第j个位置的子字符串是否是回文 vector<vector<bool>> flag(length+1,vector<bool>(length+1));
//初始化字符串中一个字符的回文情况,初始化字符串中两个连续字符的回文情况 for(int i = 1;i <= length;i++){ flag[i][i] = true; if(i < length){ if(s[i-1] == s[i]) flag[i][i+1] = true; else flag[i][i+1] = false; } }
//初始化字符串中其他长度子字符串的回文情况,这里的判断方式是判断字符串中第一个和最后一个字符是否相等,剩下部分可以根据之前的初始化来判断,这也是为什么
第一次要初始化连续两个字符之间的回文情况
j表示子字符串第一个和最后一个字符间隔字符的个数,其实就是连续3个字符,连续4个字符回文信息的判断
k表示连续3个字符,连续4个字符的开头字符能到达的位置 for(int j = 1;j <= length-2;j++){ for(int k = 1;k <= length-j-1;k++){ if(s[k-1] == s[k+j] && flag[k+1][k+j] == true) flag[k][k+j+1] = true; else flag[k][k+j+1] = false; } } vector<int> result(length+1); result[0] = -1; for(int i = 1;i <= length;i++){ result[i] = i-1; for(int j = i-1;j >= 0;j--){ if(flag[j+1][i] == true){ //这里注意,是从(i,i)开始判断 if(result[j] + 1 < result[i]) result[i] = result[j] + 1; } } } return result[length]; } };
这段代码前两个for循环是对子串回文串信息的初始化。利用一个二维数组记录子串是否是回文串。
相关文章推荐
- [leetcode-132]Palindrome Partitioning II(java)
- [leetcode]132. Palindrome Partitioning II(Java)
- 132. Palindrome Partitioning II
- leetcode@ [131/132] Palindrome Partitioning & Palindrome Partitioning II
- Hard-题目40:132. Palindrome Partitioning II
- leetcode 132: Palindrome Partitioning II
- LeetCode 132 Palindrome Partitioning II
- Leetcode 131&132. Palindrome Partitioning I & II
- LeetCode: Palindrome Partitioning II [132]
- [leedcode 132] Palindrome Partitioning II
- LeetCode 132. Palindrome Partitioning II
- leetcode[132]Palindrome Partitioning II
- 132. Palindrome Partitioning II Leetcode Python
- Java for LeetCode 132 Palindrome Partitioning II
- 【LeetCode】132.Palindrome Partitioning II
- [leetcode 132] Palindrome Partitioning II
- leetcode132 Palindrome Partitioning II
- 132. Palindrome Partitioning II
- 132. Palindrome Partitioning II
- 132. Palindrome Partitioning II