博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Palindrome Partitioning
阅读量:5242 次
发布时间:2019-06-14

本文共 1833 字,大约阅读时间需要 6 分钟。

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"]  ]    分析:本题可以用两种方法解,一种是DFS搜索所有情况,另一个方式是用动态规划。DFS在搜索的时候会有很多判断某个子字符串是否为palindrome的重叠子问题。 DFS方法代码如下:
class Solution {public:    vector
> partition(string s) { vector
> result; vector
path; dfs(result, path, s, 0); return result; } void dfs(vector
> &result, vector
&path, string s, int start){ if(start == s.length()){ result.push_back(path); return; } for(int i = start; i < s.length(); i++){ string tmp = s.substr(start, i-start+1); if(isPalindrome(tmp)){ path.push_back(tmp); dfs(result, path, s, i+1); path.pop_back(); } } } bool isPalindrome(string s){ int l = 0, r = s.length() - 1; for(; l <= r && s[l] == s[r]; l++, r--); return l > r; }};

 动态规划算法如下:

class Solution {public:    vector
> partition(string s) { int n = s.length(); vector
> f(n, vector
(n, false)); for(int i = 0; i < n; i++) for(int j = i; j >= 0; j--){ if(i == j || j + 1 < i && f[j+1][i-1] && s[j] == s[i] || j + 1 == i && s[j] == s[i]) f[j][i] = true; } vector
> cache[n+1];//cache[0] indicates an empty vector
cache[0].push_back(vector
()); for(int i = 0; i < n; i++) for(int j = -1; j < i; j++){ if(f[j+1][i]){ for(auto v:cache[j+1]){ v.push_back(s.substr(j+1, i-j)); cache[i+1].push_back(v); } } } return cache[n]; }};

 

转载于:https://www.cnblogs.com/Kai-Xing/p/3919372.html

你可能感兴趣的文章
12.4站立会议
查看>>
Java Concurrentmodificationexception异常原因和解决方法
查看>>
客户端访问浏览器的流程
查看>>
codeforces水题100道 第二十二题 Codeforces Beta Round #89 (Div. 2) A. String Task (strings)
查看>>
c++||template
查看>>
[BZOJ 5323][Jxoi2018]游戏
查看>>
编程面试的10大算法概念汇总
查看>>
Vue
查看>>
python-三级菜单和购物车程序
查看>>
条件断点 符号断点
查看>>
VMware12 + Ubuntu16.04 虚拟磁盘扩容
查看>>
水平垂直居中
查看>>
MySQL简介
查看>>
设计模式之桥接模式(Bridge)
查看>>
jquery的$(document).ready()和onload的加载顺序
查看>>
Python Web框架Django (五)
查看>>
.net学习之继承、里氏替换原则LSP、虚方法、多态、抽象类、Equals方法、接口、装箱拆箱、字符串------(转)...
查看>>
【codevs1033】 蚯蚓的游戏问题
查看>>
【程序执行原理】
查看>>
python的多行注释
查看>>