[LeetCode] Palindrome Partitioning
来源:互联网 发布:ps如何做淘宝详情页 编辑:程序博客网 时间:2024/06/05 07:55
Subsets http://blog.csdn.net/u014425050/article/details/24138019
Total Accepted: 9269 Total Submissions: 36157
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"] ]
public class Solution { // add the prefix palindrome into each (palindrome sets of remaining substring) // aabc+X = {a+X, aa+X, aab+X, aabc+X} public ArrayList<ArrayList<String>> partition(String s) { return getSubsets(s, 0); } public static ArrayList<ArrayList<String>> getSubsets(String s, int start_index) { ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>(); if (start_index == s.length()) { list = new ArrayList<ArrayList<String>>(); list.add(new ArrayList<String>()); } else { for (int i = start_index; i < s.length(); i++) { if (isPalindrome(s, start_index, i)) {String paliStr = s.substring(start_index, i+1);// create a new sets for each iteration ArrayList<ArrayList<String>> allSubsets = getSubsets(s, i + 1);ArrayList<ArrayList<String>> tmpsets = new ArrayList<ArrayList<String>>(); for (ArrayList<String> set : allSubsets) { ArrayList<String> tmp = new ArrayList<String>();tmp.add(paliStr); tmp.addAll(set); tmpsets.add(tmp); } list.addAll(tmpsets); } } } return list; } public static boolean isPalindrome(String s, int lo, int hi) { for (int i = lo, j = hi; i < j; i++, j--) { if (s.charAt(i) != s.charAt(j)) return false; } return true; }}
public class Solution { // check isPalindrome wit dp public ArrayList<ArrayList<String>> partition(String s) { ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>(); ArrayList<String> partition = new ArrayList<String>(); int len = s.length(); if (len == 0) return list; int[][] dp = new int[len][len]; for (int i = 0; i < len; i++) dp[i][i] = 1; for (int k = 1; k < len; k++) { for (int i = 0; i < len - k; i++) { int j = i + k; if (((j == i+1) || (dp[i+1][j-1] == 1)) && s.charAt(i) == s.charAt(j)) dp[i][j] = 1; } } dfs(s, 0, dp, list, partition); return list; } public void dfs(String s, int start_index, int[][] dp, ArrayList<ArrayList<String>> list, ArrayList<String> partition) { if (start_index == s.length()) list.add(new ArrayList<String>(partition)); else { for (int i = start_index; i < s.length(); i++) { partition.add(s.substring(start_index, i + 1)); if (dp[start_index][i] == 1) dfs(s, i + 1, dp, list, partition); partition.remove(partition.size() - 1); } } }}
public class Solution { public ArrayList<ArrayList<String>> partition(String s) { ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>(); ArrayList<String> partition = new ArrayList<String>(); dfs(s, list, partition); return list; } public void dfs(String s, ArrayList<ArrayList<String>> list, ArrayList<String> partition) { if (s.length() == 0) list.add(new ArrayList<String>(partition)); else { for (int i = 0; i < s.length(); i++) { String str = s.substring(0, i + 1); if (isPalindrome(str)) { partition.add(str); dfs(s.substring(i + 1, s.length()), list, partition); partition.remove(partition.size() - 1); } } } } public static boolean isPalindrome(String s) { for (int i = 0, j = s.length() - 1; i < j; i++, j--) { if (s.charAt(i) != s.charAt(j)) return false; } return true; }}
0 0
- 【leetcode】Palindrome Partitioning && Palindrome Partitioning II
- [LeetCode] Palindrome Partitioning && Palindrome Partitioning II
- LeetCode Palindrome Partitioning I&&Palindrome Partitioning II
- LeetCode Palindrome Partitioning, Palindrome Partitioning II
- [Leetcode][python]Palindrome Partitioning/Palindrome Partitioning II
- Leetcode:Palindrome Partitioning & Palindrome Partitioning II
- LeetCode: Palindrome Partitioning
- LeetCode : Palindrome Partitioning II
- [leetcode] Palindrome Partitioning II
- leetcode 122: Palindrome Partitioning
- leetcode:Palindrome Partitioning II
- leetcode:Palindrome Partitioning
- 【leetcode】Palindrome Partitioning
- 【leetcode】Palindrome Partitioning II
- leetcode - Palindrome Partitioning II
- Leetcode - Palindrome Partitioning
- LeetCode之Palindrome Partitioning
- [LeetCode]Palindrome Partitioning
- 第四章作业一
- Spring改版后最新下载地址分享
- 使用google map进行 gsm wcdma 基站定位获得及附近信息的代码
- osg::ArgumentParser
- java反射
- [LeetCode] Palindrome Partitioning
- Mac os x 固定IP设置好之后无法上网
- 关于弹窗布局显示
- 【DFS(记忆化)】zzuli 1430 多少个0
- 《算法导论》笔记 第13章 13.3 插入
- oracle学习 复制表结构和表数据
- VS2010/MFC编程入门之一(利用MFC向导生成单文档应用程序框架)
- IOS常用代码库保存
- 图象压缩技术