题目是:

Given a string s,partition s such that every substring of the partition is a palindrome

Return tthe mininum cuts needed for a palindrome partitioning of s.

For example,given s="aab"

Return 1 since the  palindrome partition["aa","b"]could be produced using 1cut

我的思路:

用动态数组dp[i]来记录当i+1个字符时,需要的分隔次数。

当前i个字符是回文串时,则dp[i]=0

当前i个字符不是回文串时,则dp[i]先置为i(i+1个字符需要的最大分割次数)

这个时候的dp[i]的值就由前i个字符来决定,用j来分隔前i个字符

则dp[i]=min{dp[i],dp[j-1]+1(当前j个字符是回文串时)||dp[j-1]+1+i-j(当前j个字符不是回文串时)}

代码如下:

int minCut(string s){

  vector<int>dp(s,size(),s.size()-1)//默认值为字符串的最大分割次数

  for(int i=0;i<s.size();i++){

    dp[i]=Is_palindrome(s.substr(0,i+1))?0:i;//判断i+1个字符是不是回文串

    if(dp[i]==0)continue;//如果是则继续循环

    for(int j=1;j<=i;j++){

      if(Is_palindrome(s,substr(j,i+1-j))){

        dp[i]=min(dp[i],dp[j-1]+1);

      }

      else{

        dp[i]=min(dp[i],dp[j-1]+1+i-j);

      }

    }

  }

  return dp[s.size()-1];

}

//判断是否是回文串

bool Is_palindrome(string s){

  int begin=0;

  int end=s.size()-1;

  while(begin<end){

    if(s[begin]<s[end]){

      begin++;

      end--;

     }

    else break;

    if(begin>=end)return true;

    return false;

    }

}

做这条题目遇到的坑:

在判断回文串的时候,我首先想到的是STL中算法中的reverse函数,但是做的时候还是拿不准reverse函数的参数,于是采取了上面代码的方式,要是严格说起来的话也不是很难,清晰易懂,看来写代码不能拘泥于现成的东西。

最新文章

  1. 手动安装配置mongodb
  2. Oracle connect by 树查询之二
  3. swift初识
  4. Informix如何释放异常的锁资源
  5. jquerymobile使用技巧
  6. HTML5 Shiv – 让该死的IE系列支持HTML5吧
  7. 颜色(color)转换为三刺激值(r/g/b)(干股)
  8. Redis从入门到精通:初级篇
  9. lua c函数注册器
  10. 使用vue时,报错“exports is not defined”
  11. Wpf binging (二) 集合绑定
  12. 使用iconfont图标
  13. 家庭记账本之GitHub账号注册与安装(一)
  14. [Learn AF3]第二章 App Framework 3.0的组件View——AF3的驱动引擎
  15. (转)EF Power tool用法
  16. Android——列表视图 ListView(二)SimpleAdapter
  17. Spring学习(一)-----Spring 模块详解
  18. 第五章Web应用与应用层协议
  19. LeeCode_01_Two sum
  20. TOSCA自动化测试工具--Convert to Template

热门文章

  1. LAMP环境下部署项目管理软件--禅道
  2. 华为云企业级Redis揭秘第16期:超越开源Redis的ACID&quot;真&quot;事务
  3. 认识并学会使用spring boot
  4. 渗透测试之本地文件包含(LFI)
  5. bash初始化文件详解
  6. Virtual Box 中的虚拟系统无法调整分辨率(无法自适应窗口大小)
  7. python数据结构:数组和列表
  8. Blazor和Vue对比学习(基础1.1):组件结构
  9. Html简单标签
  10. C#析构函数(方法)