将一个字符串s 切割成子串都是回文,最小的切割次数
来源:互联网 发布:学设计软件计划 编辑:程序博客网 时间:2024/06/10 23:57
本题源自LeetCode
---------------------------------------------------------------------------------------
用动态规划的思想
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+
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))) 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; }
阅读全文
0 0
- 将一个字符串s 切割成子串都是回文,最小的切割次数
- 最小回文切割数
- LeetCode | Palindrome Partitioning II(最少切割次数将一个子串划分成回文子串)
- 回文字符串切割问题
- 给定一个字符串s,求子串都是回文的集合。
- 字符串的切割处理
- 字符串的切割
- 将一个字符串转换为回文字符串的最小代价
- MySQL 切割某列字符串,将切割后的字符串放到对应位置
- 字符串切割
- 字符串切割
- 切割字符串
- 字符串切割
- 切割字符串
- 切割字符串
- //切割字符串
- 字符串切割
- 字符串切割
- java中的“|=”的使用方法
- PAT1005. 继续(3n+1)猜想 (25)
- poj 3181 P
- Java 抽象类
- jQuery实现放大镜效果
- 将一个字符串s 切割成子串都是回文,最小的切割次数
- window10 和 ubuntu
- 167. Two Sum II
- Java 封装
- item2vec的理解
- Java 接口
- 焦点轮播图(2) js箭头切换
- Oracle视图
- shutdown命令 关机与重启