首页 > 代码库 > Palindrome Partitioning
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"]
}
对于这道题,需要用到动态规划,首先用一张表记录下来回文数字的标识,但是有一点,在for循环中,外层从最后一个开始排,并依此递减,直到为0为止,内层循环则从外层i开始,依此递增。并依赖子问题来判断是否是回文。
1 for(int i=len-1;i>=0;i--){ 2 for(int j=i;j<len;j++){ 3 if(i==j) 4 { 5 table[i][j]=1; 6 }else{ 7 if(s.charAt(i)==s.charAt(j)){ 8 if(j==i+1||table[i+1][j-1]==1){ 9 table[i][j]=1;10 }11 }12 }13 }14 }
之后依靠这张表来进行深度优先搜索遍历,对于二维表所表示的深度优先搜索可以采用这样的方法,
1 public void DFS(String s,int begin,int [][]table,List<String> list, List<List<String>> result){ 2 int len=table.length; 3 if(begin==len){ 4 result.add(list); 5 return; 6 } 7 for(int i=begin;i<len;i++){ 8 if(table[begin][i]==1){ 9 List<String> temp=new ArrayList<String>(list);10 temp.add(s.substring(begin, i+1));11 DFS(s,i+1,table,temp,result);12 }13 }14 }
对于每一次深度搜索的最终结果都加入一个list中,之后将这些list再放入整个result 的list中
1 package Palindrome.Partitioning; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class PalindromePartitioning { 7 public List<List<String>> partition(String s) { 8 int len=s.length(); 9 int [][] table=new int[len][len];10 List<List<String>> result=new ArrayList<List<String>>();11 List<String> list=new ArrayList<String>();12 if(s.length()==0||s==null){13 result.add(list);14 }15 //initialize16 for(int i=0;i<len;i++){17 for(int j=0;j<len;j++){18 table[i][j]=0;19 }20 }21 //get Palindrome table22 for(int i=len-1;i>=0;i--){23 for(int j=i;j<len;j++){24 if(i==j)25 {26 table[i][j]=1;27 }else{28 if(s.charAt(i)==s.charAt(j)){29 if(j==i+1||table[i+1][j-1]==1){30 table[i][j]=1;31 }32 }33 }34 }35 }36 DFS(s,0,table,list,result);37 return result; 38 }39 public void DFS(String s,int begin,int [][]table,List<String> list, List<List<String>> result){40 int len=table.length;41 if(begin==len){42 result.add(list);43 return; 44 }45 for(int i=begin;i<len;i++){46 if(table[begin][i]==1){47 List<String> temp=new ArrayList<String>(list);48 temp.add(s.substring(begin, i+1));49 DFS(s,i+1,table,temp,result);50 }51 }52 }53 }
Palindrome Partitioning
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。