131. 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"]
- ]
链接: http://leetcode.com/problems/palindrome-partitioning/
题解:
一看到return all xxxx,就猜到可能要用回溯。这道题就是比较典型的递归+回溯。递归前要判断当前的子字符串是否palindrome,答案是false的话要continue。
Time Complexity - O(n*2n), Space Complexity - O(n*2n)
- public class Solution {
- public List<List<String>> partition(String s) {
- List<List<String>> res = new ArrayList<>();
- if(s == null || s.length() == 0)
- return res;
- ArrayList<String> list = new ArrayList<>();
- partition(res, list, s, 0);
- return res;
- }
- private void partition(List<List<String>> res, ArrayList<String> list, String s, int pos) {
- if(pos == s.length()) {
- res.add(new ArrayList<String>(list));
- return;
- }
- for(int i = pos + 1; i <= s.length(); i++) {
- String partition = s.substring(pos, i);
- if(!isPalindrome(partition))
- continue;
- list.add(partition);
- partition(res, list, s, i);
- list.remove(list.size() - 1);
- }
- }
- private boolean isPalindrome(String s) {
- int lo = 0, hi = s.length() - 1;
- while(lo < hi) {
- if(s.charAt(lo) != s.charAt(hi))
- return false;
- lo++;
- hi--;
- }
- return true;
- }
- }
需要好好看看主方法来确定定量分析递归算法的时间复杂度。
二刷:
仔细想一想代码可以简化不少。主要分为三部分。1是题目给定的方法,2是辅助方法,用来递归和回溯,3是判断string是否是palindrome。注意考虑清楚需要多少变量,以及时间空间复杂度。
Time Complexity: O(n!)
Space Complexity: O(n ^ 2)
Java:
- public class Solution {
- public List<List<String>> partition(String s) {
- List<List<String>> res = new ArrayList<>();
- List<String> list = new ArrayList<>();
- partition(res, list, s);
- return res;
- }
- private void partition(List<List<String>> res, List<String> list, String s) {
- if (s == null || s.length() == 0) {
- res.add(new ArrayList<String>(list));
- return;
- }
- for (int i = 0; i < s.length(); i++) {
- String subStr = s.substring(0, i + 1);
- if (isPalindrome(subStr)) {
- list.add(subStr);
- partition(res, list, s.substring(i + 1));
- list.remove(list.size() - 1);
- }
- }
- }
- private boolean isPalindrome(String s) {
- if (s == null || s.length() < 2) {
- return true;
- }
- int lo = 0, hi = s.length() - 1;
- while (lo <= hi) {
- if (s.charAt(lo) != s.charAt(hi)) {
- return false;
- }
- lo++;
- hi--;
- }
- return true;
- }
- }
三刷:
依然是使用二刷的方法。
Java:
- public class Solution {
- public List<List<String>> partition(String s) {
- List<List<String>> res = new ArrayList<>();
- if (s == null || s.length() == 0) return res;
- partition(res, new ArrayList<>(), s);
- return res;
- }
- private void partition(List<List<String>> res, List<String> list, String s) {
- if (s.length() == 0) {
- res.add(new ArrayList<String>(list));
- return;
- }
- for (int i = 0; i <= s.length(); i++) {
- String front = s.substring(0, i);
- if (isPalindrome(front)) {
- list.add(front);
- partition(res, list, s.substring(i));
- list.remove(list.size() - 1);
- }
- }
- }
- private boolean isPalindrome(String s) {
- if (s == null || s.length() == 0) return false;
- int lo = 0, hi = s.length() - 1;
- while (lo < hi) {
- if (s.charAt(lo) != s.charAt(hi)) return false;
- lo++;
- hi--;
- }
- return true;
- }
- }
Reference:
http://stackoverflow.com/questions/24591616/whats-the-time-complexity-of-this-algorithm-for-palindrome-partitioning
http://blog.csdn.net/metasearch/article/details/4428865
https://en.wikipedia.org/wiki/Master_theorem
http://www.cnblogs.com/zhuli19901106/p/3570430.html
https://leetcode.com/discuss/18984/java-backtracking-solution
https://leetcode.com/discuss/9623/my-java-dp-only-solution-without-recursion-o-n-2
https://leetcode.com/discuss/41626/concise-java-solution
https://leetcode.com/discuss/4788/shouldnt-we-use-dp-in-addition-to-dfs
131. Palindrome Partitioning的更多相关文章
- leetcode 131. Palindrome Partitioning 、132. Palindrome Partitioning II
131. Palindrome Partitioning substr使用的是坐标值,不使用.begin()..end()这种迭代器 使用dfs,类似于subsets的题,每次判断要不要加入这个数 s ...
- Leetcode 22. Generate Parentheses Restore IP Addresses (*) 131. Palindrome Partitioning
backtracking and invariant during generating the parathese righjt > left (open bracket and cloas ...
- Leetcode 131. Palindrome Partitioning
Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...
- 78. Subsets(M) & 90. Subsets II(M) & 131. Palindrome Partitioning
78. Subsets Given a set of distinct integers, nums, return all possible subsets. Note: The solution ...
- [leetcode]131. Palindrome Partitioning字符串分割成回文子串
Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...
- 【LeetCode】131. Palindrome Partitioning
Palindrome Partitioning Given a string s, partition s such that every substring of the partition is ...
- 131. Palindrome Partitioning (Back-Track, DP)
Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...
- 131. Palindrome Partitioning(回文子串划分 深度优先)
Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...
- Java for LeetCode 131 Palindrome Partitioning
Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...
随机推荐
- 对list集合中的对象进行排序(转载)
原文链接:http://blog.csdn.net/veryisjava/article/details/51675036 Collections对List集合中的数据进行排序 有时候需要对集合中的元 ...
- 设计模式------STRATEGY(策略模式)
http://blog.csdn.net/wuzhekai1985/article/details/6665197.仅供参考. 策略模式:实现替换功能,如cache替换算法:当发生Cache缺失时,C ...
- while循环语句
while(循环条件,返回布尔类型) { 代码执行的操作,或者打印输出. } do whilw循环 do { ...
- JAVA调用WebService总结
一.wximport自动生成代码 wsimport -keep -p com.test.client http://localhost:8080/test/services/TestService?w ...
- Xcode中 xx duplicate symbols for architecture i386错误提示
今天在编译iOS项目时Xcode报如下错误: ld: 15 duplicate symbols for architecture i386 clang: error:linker command fa ...
- jq选取对象的方法
$("#找id的")$(".找样式的") $("div[id]") 选择所有含有id属性的div元素 $("input[nam ...
- OC3_字符串分割
// // main.m // OC3_字符串分割 // // Created by zhangxueming on 15/6/11. // Copyright (c) 2015年 zhangxuem ...
- Putty + Vim + Color
Putty + Vim + Color 参考: 1.Using colour schemes with vim and putty 2.Putty的颜色 3.Custom PuTTY Color Th ...
- 洛谷 P1108 低价购买
P1108 低价购买 标签 动态规划 难度 提高+/省选- 题目描述 "低价购买"这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:& ...
- How to Change Password Complexity Requirements in Windows XP
Original Link: http://www.ehow.com/how_4812793_password-complexity-requirements-windows-xp.html#ixzz ...