将一个字符串s 切割成子串都是回文,最小的切割次数
2017-10-07 11:04
369 查看
本题源自LeetCode
---------------------------------------------------------------------------------------
用动态规划的思想
1 用一个dp数组来存储子串(0,i)的最小切割次数,则最优解在dp[str.length()-1].
2 如果当前子串是回文则dp[i]=0;否则dp[i]=i;
3 对于i大于等于1 的子串,如果【0,i】不是回文,
int minCut(string s) {
int len=s.length();
vector<int> dp(len,0);
for(int i=0;i<len;i++){
dp[i]=IsPalindRome(s.substr(0,i+1)) ? 0 : i;
if(dp[i]==0)
continue;
else{
for(int j=1;j<=i;j++){
if(IsPalindRome(s.substr(j,i-j+1)))
4000
dp[i]=min(dp[i],dp[j-1]+1);
else{
dp[i]=min(dp[i],dp[j-1]+i-j+1);
}
}
}
}
return dp[len-1];
}
bool IsPalindRome(string str){
int end=str.length()-1;
int start=0;
while(start<end){
if(str[start]==str[end]){
start++;
end--;
}else{
return false;
}
}
return true;
}
---------------------------------------------------------------------------------------
用动态规划的思想
1 用一个dp数组来存储子串(0,i)的最小切割次数,则最优解在dp[str.length()-1].
2 如果当前子串是回文则dp[i]=0;否则dp[i]=i;
3 对于i大于等于1 的子串,如果【0,i】不是回文,
如果s.substring(j,i+
1
)(j<=i,即遍历i之前的每个子串)是回文时,dp[i] = min(dp[i], dp[j-
1
]+
1
);
4 否则s.substring(j,i+[code]1
)(j<=i)不是回文时,dp[i] = min(dp[i],dp[j-
1
]+i+
1
-j);
int minCut(string s) {
int len=s.length();
vector<int> dp(len,0);
for(int i=0;i<len;i++){
dp[i]=IsPalindRome(s.substr(0,i+1)) ? 0 : i;
if(dp[i]==0)
continue;
else{
for(int j=1;j<=i;j++){
if(IsPalindRome(s.substr(j,i-j+1)))
4000
dp[i]=min(dp[i],dp[j-1]+1);
else{
dp[i]=min(dp[i],dp[j-1]+i-j+1);
}
}
}
}
return dp[len-1];
}
bool IsPalindRome(string str){
int end=str.length()-1;
int start=0;
while(start<end){
if(str[start]==str[end]){
start++;
end--;
}else{
return false;
}
}
return true;
}
相关文章推荐
- 给定一个字符串,切分该字符串,使得到的子串都是回文字符串,计算最少的切分次数。
- 题目描述 给定一个字符串,找出该字符串的最长回文子串。回文字符串指的就是从左右两边看都一样的字符串,如aba,cddc都是回文字符串。字符串abbacdc存在的回文子串有abba和cdc,因此它的最长
- 每天一道LeetCode-----将字符串切分,使每个子串都是回文串,计算所有可能结果和最小切分次数
- 给定字符串S,是的每个子串为回文子串,求最小划分次数
- 求一个字符串中连续出现最多的子串次数
- 求一个字符串中连续出现次数最多的子串
- 求一个字符串中连续出现次数最多的子串
- 求一个字符串中连续出现的次数最多的子串
- 寻找一个字符串中连续出现次数最多的子串
- 求一个字符串中出现次数最多的子串
- 求一个字符串中连续出现的次数最多的子串
- 求一个字符串中连续出现次数最多的子串
- 求一个字符串中连续出现的次数最多的子串
- 判断一个字符串中所有子串是否为回文子串
- 求一个字符串中连续出现次数最多的子串
- 求一个字符串中连续出现次数最多的子串(程序面试宝典)
- 求一个字符串中连续出现次数最多的子串
- 【字符串问题】求一个字符串中连续出现次数最多的子串
- 求一个字符串中连续出现次数最多的子串
- 求一个字符串中连续出现次数最多的子串