Palindrome Partitioning II
来源:互联网 发布:金山画王软件下载 编辑:程序博客网 时间:2024/05/16 13:56
class Solution {public: int minCut(string s) { int *cache=new int[s.size()*s.size()];//判定是否为回文串 int *minCutNum=new int[s.size()];//minCutNum[i]表示s[i:]的minCut minCutNum[s.size()-1]=0; memset(cache,-1,s.size()*s.size()*sizeof(int)); for(int i=0;i<s.size();i++) { cache[i*s.size()+i]=1; } for(int j=s.size()-2;j>=0;j--) { if(isPalin(s,j,s.size()-1,cache)) { minCutNum[j]=0; }else { minCutNum[j]=INT_MAX; for(int end=j;end<s.size()-1;end++) { if(j==0 && end==3) { //cout<<"jj"<<endl; } if(isPalin(s,j,end,cache)) { //end表示划分点 minCutNum[j]=min(minCutNum[end+1]+1,minCutNum[j]); } } } } //for(int i=0;i<s.size();i++) // { // cout<<minCutNum[i]<<endl; //} return minCutNum[0]; } bool isPalin(const string &s,const int i, const int j,int *cache) { if(i>j) return true; if(cache[i*s.size()+j]==-1) { bool result=(s[i]==s[j] && isPalin(s,i+1,j-1,cache)); if(result) cache[i*s.size()+j]=1; else cache[i*s.size()+j]=0; return result; }else { return cache[i*s.size()+j]?true:false; } }};
0 0
- LeetCode : Palindrome Partitioning II
- [leetcode] Palindrome Partitioning II
- leetcode:Palindrome Partitioning II
- Palindrome Partitioning II
- 【leetcode】Palindrome Partitioning II
- Palindrome Partitioning II
- leetcode - Palindrome Partitioning II
- Palindrome Partitioning II
- Palindrome Partitioning II
- [LeetCode]Palindrome Partitioning II
- [Leetcode]Palindrome Partitioning II
- [leetcode]Palindrome Partitioning II
- Palindrome Partitioning II
- leetcode Palindrome Partitioning II
- Palindrome Partitioning II
- LetCode:Palindrome Partitioning II
- LeetCode-Palindrome Partitioning II
- [leetcode] Palindrome Partitioning II
- 今年暑假不AC --贪心
- Unix多线程编程技术
- 14 0506制作日历
- 主成分分析、因子分析、聚类的概览与比较
- zz)在SSIS 2012 中使用CDC 数据变化捕获
- Palindrome Partitioning II
- 基于C++11的线程池
- 浅谈ANR及如何分析解决ANR
- ioc 依赖注入
- 搜索引擎 谈到网页搜索引擎时
- [cocos2d-x]如何减少cocos2d-x游戏的耗电量?
- Struts2动态方法调用
- uva 445
- Planting Trees