Palindrome Partitioning (回文子串题)
Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
For example, given s = "aab",
Return
[
["aa","b"],
["a","a","b"]
] 题意理解:就是把一个字符串进行切割,要求切割之后的子串是回文串。 思路步骤:1.回文字符串划分 2.动态规划生成回文字符串数组 3.根据dp数组用深度搜索生成回文字符串的划分 简单描述一下,首先用动态规划的方法记录出dp[i][j]是否为回文子串(是为1,否则为0)。dp[i][j]表示字符串s中的索引从i....j的子串是不是回文字符串。 构造dp数组,当i=j时,dp[i][j]=1。 当i不等于j时,要求dp[i][j]只需当s[i]==s[j]且dp[i+1][j-1]=1来判断其余的即可。(i+1和j-1表示子串s[i...j]变为子串s[i+1...j-1],即去掉左右两边) 因此我们得反着来求dp,因为需要用到i+1. 然后根据生成好的dp数组,用dfs对数组进行划分。![]()
代码:
class Solution {
private:
int dp[][];
vector<vector<string>> result;
void dfs(string s, int begin,vector<string> temp) {
if(begin==s.length()) {
result.push_back(temp);
return;
}
for(int i=begin;i<s.length();i++) {
if(dp[begin][i]==) {
temp.push_back(s.substr(begin,i-begin+));
dfs(s,i+,temp);
temp.pop_back();
}
}
}
void dp_resolve(string s){
int n=s.size();
memset(dp,,sizeof(dp));
for (int i = n-; i >=; --i)
{
for (int j = i; j < n; ++j)
{
if(j==i){
dp[i][j]=;
}else if(j==i+){
if(s[i]==s[j]) dp[i][j]=;
}
else{
if(s[i]==s[j]&&dp[i+][j-]) dp[i][j]=;
}
}
}
vector<string> temp;
dfs(s,,temp);
return;
}
public:
vector<vector<string>> partition(string s) {
if(s.empty()) return result;
dp_resolve(s);
return result;
}
};
参考博文:http://blog.csdn.net/worldwindjp/article/details/22042133
http://blog.csdn.net/u011095253/article/details/9177451
类似题目:最长回文子串(Longest Palindromic Substring)
最长回文子序列
Palindrome Partitioning (回文子串题)的更多相关文章
- 131. Palindrome Partitioning(回文子串划分 深度优先)
Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...
- 【HDU】4632 Palindrome subsequence(回文子串的个数)
思路:设dp[i][j] 为i到j内回文子串的个数.先枚举所有字符串区间.再依据容斥原理. 那么状态转移方程为 dp[i][j] = dp[i][j-1] + dp[i+1][j] - dp[i+ ...
- [LeetCode] 131. Palindrome Partitioning 回文分割
Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...
- Atcoder CODE FESTIVAL 2017 qual C D - Yet Another Palindrome Partitioning 回文串划分
题目链接 题意 给定一个字符串(长度\(\leq 2e5\)),将其划分成尽量少的段,使得每段内重新排列后可以成为一个回文串. 题解 分析 每段内重新排列后是一个回文串\(\rightarrow\)该 ...
- 后缀数组 - 求最长回文子串 + 模板题 --- ural 1297
1297. Palindrome Time Limit: 1.0 secondMemory Limit: 16 MB The “U.S. Robots” HQ has just received a ...
- #leetcode刷题之路5-最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1:输入: "babad"输出: "bab"注意: " ...
- 【算法】最长回文子串 longest palindrome substring
对于字符串S, 要找到它最长的回文子串,能想到的最暴力方法,应该是对于每个元素i-th都向左向右对称搜索,最后用一个数组span 记录下相对应元素i-th为中心的回文子串长度. 那么问题来了: 1. ...
- 【LeetCode每日一题 Day 5】5. 最长回文子串
大家好,我是编程熊,今天是LeetCode每日一题的第五天,一起学习LeetCode第五题<最长回文子串>. 题意 给你一个字符串 s,找到 s 中最长的回文子串. 示例 输入:s = & ...
- LeetCode随缘刷题之最长回文子串
这一题我用的相对比较笨的方法. 相对于大佬们用的动态规划法,比较复杂.但却更容易理解,我主要是通过记录下标来确定最长回文串的. package leetcode.day_12_06; /** * 给你 ...
随机推荐
- 原生js的容易忽略的相似点(二)
1.new Object 和字面量 {}测试; <script type="text/javascript"> //1.new出来对象 console.log(obj, ...
- MongoDB最简单的入门教程之四:使用Spring Boot操作MongoDB
Spring Boot 是一个轻量级框架,可以完成基于 Spring 的应用程序的大部分配置工作.Spring Boot的目的是提供一组工具,以便快速构建容易配置的Spring应用程序,省去大量传统S ...
- 制作JPEGImages出现的bug
我用的是下面这个脚本进行改名字: import os import sys path = "/home/bnrc/py-faster-rcnn/data/VOCdevkit2007/VOC2 ...
- There is no Action mapped for namespace [/] and action name [updateUser] associated with context path [].
在使用Struts2的时候,遇到了这个问题. 原因分析: 找不到指定的路径, 那么就是struts.xml的内容问题, 或者是struts.xml的文件位置存在问题. struts2默认是应该放在sr ...
- 光猫&路由器网络配置
前期准备:电脑(工业电脑).网线.光猫.路由器 1.检查连接光猫后能否正常上网:把网线两头的水晶头,一头插在光猫上的千兆口,一头插在电脑(工业电脑)的网口上,看电脑能否正常上网: 可以正常上网:说明光 ...
- git命令使用(三)
git的使用--分支的使用 我们都知道拉取代码的时候,拉下来的是默认的分支,但我们需要的是,其他分支的使用操作 开始,拉取项目 git clone url 查看分支,显示默认分支 git branch ...
- XML 解析 & 特殊字符报错
在xml文件中,有一些符号是具有特殊意义的,如果直接使用会导致xml解析报错,为了避免错误,我们需要将特殊的字符使用其对应的转义实体进行操作.这些字符如下 < == < > = ...
- (7) openssl dgst(生成和验证数字签名)
该伪命令是单向加密工具,用于生成文件的摘要信息 也可以进行数字签名,及验证数字签名. 首先要明白的是,数字签名的过程是计算出摘要信息,然后使用私钥对摘要信息进行加密得 ...
- Django 1.8.11 REST风格路由
# -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community b ...
- Flash学习笔记(01)
一:动画基础原理 二:Flash的动画的制作方式 三:元件与实例的关系 四:Flash实例 可以做出网上常见的网页动画 Flash能为我们做什么 1.网站.贺卡.配乐短片.短剧.游戏.教学 ...
代码: