Palindrome Partitioning

来源:互联网 发布:学习办公软件视频 编辑:程序博客网 时间:2024/05/06 19:02

还是没想好回溯的边界条件,回去再看点书。

来自于http://discuss.leetcode.com/questions/1265/palindrome-partitioning

import java.util.ArrayList;public class Solution {public boolean[][] palin; public ArrayList<ArrayList<String>> partition(String s) {int n = s.length();if(n==0)return null;palin = new boolean[n][n];for(int i=0;i<n;i++)palin[i][i]=true;for(int i=0;i<=n-2;i++){palin[i][i+1]=(s.charAt(i)==s.charAt(i+1));}for(int i=2;i<=n-1;i++)for(int j=0;j+i<n;j++)palin[j][i+j]=(s.charAt(j)==s.charAt(i+j)&&palin[j+1][i+j-1]);return patitionhelper(s,0,palin);}public ArrayList<ArrayList<String>> patitionhelper(String s,int start,boolean[][] palin){ArrayList<ArrayList<String>> ba = new ArrayList<ArrayList<String>>();if(start==s.length()){  ba.add(new ArrayList<String>());  return ba;}for(int i=start;i<s.length();i++){if(palin[start][i]==true){for(ArrayList<String> sub:patitionhelper(s,i+1,palin)){sub.add(0,s.substring(start,i+1));ba.add(sub);//System.out.println(211);}}}return ba;}public static void main(String[] args){    String s ="aab";    Solution so = new Solution();    System.out.println(so.partition(s));    //for(ArrayList<String> subPa:so.partition(s))    //System.out.print(subPa);    }}