leetcode 131. Palindrome Partitioning 、132. Palindrome Partitioning II
131. Palindrome Partitioning
一个字符串,通过不同的切分找到所有切分后的子字符串都是回文的可能性
substr使用的是坐标值,不使用.begin()、.end()这种迭代器
使用dfs,类似于subsets的题,每次判断要不要加入这个数
start每次是起始的位置,判断当前位置到起始位置是不是回文
- class Solution {
- public:
- vector<vector<string>> partition(string s) {
- vector<vector<string> > result;
- if(s.empty())
- return result;
- vector<string> res;
- int start = ;
- partition(s,result,res,start);
- return result;
- }
- void partition(string s,vector<vector<string>>& result,vector<string>& res,int start){
- if(start == s.size()){
- result.push_back(res);
- return;
- }
- for(int i = start;i < s.size();i++){
- if(!ispalindrome(s,start,i))
- continue;
- res.push_back(s.substr(start,i - start + ));
- partition(s,result,res,i+);
- res.pop_back();
- }
- }
- bool ispalindrome(string s,int start,int end){
- while(start < end){
- if(s[start++] != s[end--])
- return false;
- }
- return true;
- }
- };
132. Palindrome Partitioning II
切分字符串,找到最小切分次数让所有的子字符串都是回文
这种方法是否回文和dp一起做了。dp[i]表示当前位置最小的切分次数。
每次先初始化先初始化为要切分i次,然后从前往后找,找到符合的然后更新最小值
- class Solution {
- public:
- int minCut(string s) {
- int n = s.size();
- vector<int> dp(n);
- vector<vector<bool> > flag(n,vector<bool>(n));
- for(int i = ;i < n;i++){
- dp[i] = i;
- for(int j = ;j <= i;j++){
- if(s[i] == s[j] && (i - j < ||flag[i-][j+])){
- flag[i][j] = true;
- dp[i] = j == ? :min(dp[i],dp[j-] + );
- }
- }
- }
- return dp[n-];
- }
- };
老方法,这种方法是把所有子串的回文串先存储起来,然后再进行dp
- class Solution {
- public:
- int minCut(string s) {
- int length = s.length();
- if(length <= )
- return ;
- vector<vector<bool>> flag(length+,vector<bool>(length+));
- for(int i = ;i <= length;i++){
- flag[i][i] = true;
- if(i < length){
- if(s[i-] == s[i])
- flag[i][i+] = true;
- else
- flag[i][i+] = false;
- }
- }
- for(int j = ;j <= length-;j++){
- for(int k = ;k <= length-j-;k++){
- if(s[k-] == s[k+j] && flag[k+][k+j] == true)
- flag[k][k+j+] = true;
- else
- flag[k][k+j+] = false;
- }
- }
- vector<int> result(length+);
- result[] = -;
- for(int i = ;i <= length;i++){
- result[i] = i-;
- for(int j = i-;j >= ;j--){
- if(flag[j+][i] == true){
- if(result[j] + < result[i])
- result[i] = result[j] + ;
- }
- }
- }
- return result[length];
- }
- };
leetcode 131. Palindrome Partitioning 、132. Palindrome Partitioning II的更多相关文章
- LeetCode 131. 分割回文串(Palindrome Partitioning)
131. 分割回文串 131. Palindrome Partitioning 题目描述 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. LeetC ...
- leetcode 266.Palindrome Permutation 、267.Palindrome Permutation II
266.Palindrome Permutation https://www.cnblogs.com/grandyang/p/5223238.html 判断一个字符串的全排列能否形成一个回文串. 能组 ...
- leetcode 169. Majority Element 、229. Majority Element II
169. Majority Element 求超过数组个数一半的数 可以使用hash解决,时间复杂度为O(n),但空间复杂度也为O(n) class Solution { public: int ma ...
- leetcode 79. Word Search 、212. Word Search II
https://www.cnblogs.com/grandyang/p/4332313.html 在一个矩阵中能不能找到string的一条路径 这个题使用的是dfs.但这个题与number of is ...
- leetcode 54. Spiral Matrix 、59. Spiral Matrix II
54题是把二维数组安卓螺旋的顺序进行打印,59题是把1到n平方的数字按照螺旋的顺序进行放置 54. Spiral Matrix start表示的是每次一圈的开始,每次开始其实就是从(0,0).(1,1 ...
- leetcode 263. Ugly Number 、264. Ugly Number II 、313. Super Ugly Number 、204. Count Primes
263. Ugly Number 注意:1.小于等于0都不属于丑数 2.while循环的判断不是num >= 0, 而是能被2 .3.5整除,即能被整除才去除这些数 class Solution ...
- leetcode 344. Reverse String 、541. Reverse String II 、796. Rotate String
344. Reverse String 最基础的旋转字符串 class Solution { public: void reverseString(vector<char>& s) ...
- leetcode 280.Wiggle Sort 、324. Wiggle Sort II
Wiggle Sort: 注意:解法一是每次i增加2,题目不是保证3个3个的情况,而是整个数组都要满足要求. 解法一错误版本: 如果nums的长度是4,这种情况下nums[i+1]会越界.但是如果你用 ...
- leetcode 1.Two Sum 、167. Two Sum II - Input array is sorted 、15. 3Sum 、16. 3Sum Closest 、 18. 4Sum 、653. Two Sum IV - Input is a BST
1.two sum 用hash来存储数值和对应的位置索引,通过target-当前值来获得需要的值,然后再hash中寻找 错误代码1: Input:[3,2,4]6Output:[0,0]Expecte ...
随机推荐
- 微信公众号开发--.Net Core实现微信消息加解密
1:准备工作 进入微信公众号后台设置微信服务器配置参数(注意:Token和EncodingAESKey必须和微信服务器验证参数保持一致,不然验证不会通过). 2:基本配置 设置为安全模式 3.代码实现 ...
- AJAX 基本结构 数据加载
AJAX -- 网页数据异步加载 .ashx 一般处理程序 json 数据格式,在不同的语言之间传递数据 对象格式: "{"key":"value& ...
- Spring Security OAuth2 SSO 单点登录
基于 Spring Security OAuth2 SSO 单点登录系统 SSO简介 单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自 ...
- 【Spring】5、利用自定义注解在SpringMVC中实现自定义权限检查
转自:http://www.tuicool.com/articles/6z2uIvU 先描述一下应用场景,基于Spring MVC的WEB程序,需要对每个Action进行权限判断,当前用户有权限则允许 ...
- I want to learn Android Development, where do I start?
Question: But I completely have no idea what I wanted to make. I just would like to study android.Wo ...
- 算法第四版-文字版-下载地址-Robert Sedgewick
下载地址:https://download.csdn.net/download/moshenglv/10777447 算法第四版,文字版,可复制,方便copy代码 目录: 第1章 基 础 ...... ...
- System.arraycopy 怎么使用的?
前言:看 ArrayList 的源码,发现 remove 方法主要依赖了 System.arraycopy() 方法实现的.所以需要了解一下这个方法如何使用.转载请注明出处:https://www.c ...
- JavaScript初学者必看“new”
译者按: 本文简单的介绍了new, 更多的是介绍原型(prototype),值得一读. 原文: JavaScript For Beginners: the 'new' operator 译者: Fun ...
- 网页三剑客:HTML+CSS+JavaScript 之 HTML的概述
HTML(超文本标记语言) 什么是HTML? HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言: HyperText Markup Language HTML 不是一种编程语言,而 ...
- 1474 十进制转m进制
1474 十进制转m进制 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 将十进制数n转换成m进制数 m ...