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 ...
随机推荐
- Oracle 当前时间加减
当我们用 select sysdate+number from dual ;我们得到的是,当前的时间加上number天后的时间.从这里我们也可以看出,使用这种方式进行时间计算的时候,计算的单位是天, ...
- 高焕堂《android从程序员到架构师之路》 YY讲坛直面大师学习架构设计
<android从程序员到架构师之路>YY讲坛活动: sundy携手高焕堂老师全程YY答疑 与大师一起,分享android技术 时间:7月21日下午2:00 报名联系QQ:22243 ...
- Codeforces Round #254 (Div. 2)D(预计)
D. DZY Loves FFT time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- 深入浅出Hadoop Mahout数据挖掘实战(算法分析、项目实战、中文分词技术)
Mahout简介 Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目, 提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建 ...
- Google用户登录界面 Android实现
实验效果: 项目目录: Java代码(放在Src文件下) package com.bn.chap9.login; import java.io.BufferedReader; import java. ...
- hibernate简单介绍
1. Hibernate是什么? hibernate是 轻量级的 ORM 框架. ORM全称object/relationmapping [对象/关系映射]. Hibernate主要用来实现Jav ...
- 一个关于native sql的程序
*&---------------------------------------------------------------------* *& Report ZHR_BPM11 ...
- delphi中一切皆指针
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Form ...
- kgdb接收一个数据包详解
0 kdb>kgdb // 可进入kgdb 模式 if (dbg_kdb_mode) { error = kdb_stub(ks); } else ...
- cpu性能探究 :cache line 原理
參考: 一个解说Direct Mapped Cache很深入浅出的文章: http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Memory/dir ...