leetcode回文子串拆分-最小拆分次数
上一篇是要输出所有的可能拆分,这回是要输出拆分次数最少的切割次数。
如果直接按照上一篇那么做的话,就会超时,因为我们在判断s[i][j]是否是回文的时候做了很多的无用功,每一个s[i][j]都用字符串计算了一遍,然而实际上可以根据s[i+1][j+1]推算出来的。
题目。代码如下
/**
* @file Palindrome_Partitioning2.cpp
* @Brief
* @author Brian
* @version 1.0
* @date 2013-09-06
*/ #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <memory.h>
#include <algorithm>
#include <math.h>
#include <queue>
#include <vector>
using namespace std;
#define MAXINT 0x7fffffff class Solution {
public:
int minCut(string s) { int len = s.length();
int* cutNum = new int[len];
//int[i][j]: true if substr(i,j) is palindrome, false if not
bool** palindrome = new bool*[len];
for(int i=0;i<len;i++)
palindrome[i] = new bool[len];
//init palindrome for(int l=0;l<=len;l++){
for(int i=0;i<=len-l&&i<len;i++){
if(l==1||l==0) palindrome[i][l] = true;
else{
palindrome[i][l] = palindrome[i+1][l-2]&&(s[i]==s[i+l-1]);
}
}
}
for(int i=0;i<len;i++)
cutNum[i]=MAXINT;
cutNum[0]=0;
for(int i=1;i<len;i++){
for(int j=0;j<=i;j++){
string subs = s.substr(j,i-j+1);
if(palindrome[j][i-j+1]){
if(j==0){
cutNum[i]=0;
}else{
if(cutNum[i]>cutNum[j-1]+1)
cutNum[i] = cutNum[j-1]+1;
}
} }
}
return cutNum[len-1];
}
bool is_palindrome(string s){
if(s.length() <= 1)
return true;
else{
for(int i=0;i<s.length()/2;i++){
if(s[i]!=s[s.length()-i-1]){
return false;
}
}
}
return true; }
};
int main(){
Solution s;
cout<< s.minCut("abv"); return 0;
}
leetcode回文子串拆分-最小拆分次数的更多相关文章
- LeetCode(5):最长回文子串
Medium! 题目描述: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 长度最长为1000. 示例: 输入: "babad" 输出: "bab&quo ...
- 求最长回文子串 - leetcode 5. Longest Palindromic Substring
写在前面:忍不住吐槽几句今天上海的天气,次奥,鞋子里都能养鱼了...裤子也全湿了,衣服也全湿了,关键是这天气还打空调,只能瑟瑟发抖祈祷不要感冒了.... 前后切了一百零几道leetcode的题(sol ...
- LeetCode:Longest Palindromic Substring 最长回文子串
题目链接 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...
- LeetCode之“字符串”:最长回文子串
题目要求: 给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串.例如,给出字符串 "abcdzdcab",它的最长回文子串为 & ...
- LeetCode刷题-005最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000.示例 1:输入: "babad"输出: "bab"注意: "ab ...
- python练习 之 实践出真知 中心扩展法求最大回文子串 (leetcode题目)
1 问题,给定一个字符串,求字符串中包含的最大回文子串,要求O复杂度小于n的平方. 首先需要解决奇数偶数的问题,办法是:插入’#‘,aba变成#a#b#a#,变成奇数个,aa变成#a#a#,变成奇数个 ...
- LeetCode:最长回文子串【5】
LeetCode:最长回文子串[5] 题目描述 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: ...
- 转载:LeetCode:5Longest Palindromic Substring 最长回文子串
本文转自:http://www.cnblogs.com/TenosDoIt/p/3675788.html 题目链接 Given a string S, find the longest palindr ...
- LeetCode.5-最长回文子串(Longest Palindromic Substring)
这是悦乐书的第342次更新,第366篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第3题(顺位题号是5).给定一个字符串s,找到s中最长的回文子字符串. 您可以假设s ...
随机推荐
- WCF技术剖析之二十一: WCF基本的异常处理模式[上篇]
原文:WCF技术剖析之二十一: WCF基本的异常处理模式[上篇] 由于WCF采用.NET托管语言(C#和NET)作为其主要的编程语言,注定以了基于WCF的编程方式不可能很复杂.同时,WCF设计的一个目 ...
- Qt Creator键盘快捷键速查
原地址:http://bbs.qter.org/forum.php?mod=viewthread&tid=904&extra=page%3D2 一般操作的键盘快捷键 操作 快捷键 操作 ...
- javascript 中 事件流和事件冒泡
一.事件流 是描述页面接受事件的顺序,IE 使用的是时间冒泡流;而Netscape的事件采用的是事件捕获流.1.事件冒泡JS 和 HTML是通过事件的方式实现交互.事件冒泡 开始元素,将事件逐级传递, ...
- 基于visual Studio2013解决C语言竞赛题之1092链表转换
题目 解决代码及点评 /************************************************************************/ /* ...
- Ubuntu 14.04LTS Gnome GUI初体验及163更新源配制
Ubuntu 14.04 LTS于前天(2014.4.17)公布, 我今天将我的系统升级到最新, 体验了下最新的UI系统. 我选择了Ubuntu Gnome 的GUI界面.我曾经的系统是12.04lt ...
- smartforms初始化
smartforms 第一次打开的页面是和prd环境下的一样,需要跑一个程序才能编辑
- metasploit学习之ms03_026
傻瓜式利用ms03_026_dcom: Matching Modules ================ Name Disclosure Date Rank Description ---- --- ...
- windows查看某个端口被谁占用
XAMPP Error: Apache shutdown unexpectedly. 解决思路 我建议首先 运行在cmd中运行 (安装目录)apache/bin/httpd.exe 无法启动apach ...
- Swift - 时间控制器NSTimer(每隔一定时间执行某个函数)
时间控制器NSTimer可以实现定时器功能,即每隔一定时间执行具体函数,可以重复也可以只执行一次. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 cl ...
- Spring中的FactoryBean
从SessionFactory说起: 在使用SSH集成开发的时候,我们有时候会在applicationContext.xml中配置Hibernate的信息,以下是配置SessionFactory的一段 ...