LeetCode Palindrome Partitioning

来源:互联网 发布:那家伙的声音知乎 编辑:程序博客网 时间:2024/06/17 19:02
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://oj.leetcode.com/problems/palindrome-partitioning/
题意分析: 对输入的字符串划分为一组回文字符串。
解题思路:首先用动态规划的方法生成标志回文字符串的数组,partitioning_map[i][j]=1的话,表明:string[i..j]是一个回文字符串。
其中一个知识点是:划分的时候判断a[i][j]是否是回文串,需要用到:a[i+1][j-1]的值,所以生成标志回文字符串的数组的时候外层循环要从 s.length()-1 开始逐次递减。
其次根据生成好的partitioning_map用dfs对数组进行划分。


//回文字符串划分//动态规划生成回文字符串数组//根据数组用深度搜索生成回文字符串的划分public class Solution {    //生成标志回文字符串的数组,partitioning_map[i][j]=1的话,表明:string[i..j]是一个回文字符串    void dp(String s, char [][] palindrome_map) {        for(int i=s.length()-1;i>=0;i--) {            for(int j=i;j<s.length();j++) {                if(i==j) {                    palindrome_map[i][j] = 1;                } else {                    if(s.charAt(i)==s.charAt(j)) {                        if(j==i+1||palindrome_map[i+1][j-1]==1) {                            palindrome_map[i][j] = 1;                        }                    }                }            }        }    }        //根据生成好的回文标记数组对字符串进行划分    void dfs(String s, int begin, char [][] palindrome_map, ArrayList<String> array, ArrayList<ArrayList<String>> result) {        if(begin==s.length()) {            result.add(array);            return;        }                for(int i=begin;i<s.length();i++) {            if(palindrome_map[begin][i]==1) {                ArrayList<String> tmp = new ArrayList<String>(array);                tmp.add(s.substring(begin,i+1));                dfs(s,i+1,palindrome_map,tmp, result);            }        }    }    public ArrayList<ArrayList<String>> partition(String s) {        ArrayList<ArrayList<String>> result = new ArrayList<ArrayList<String>>();        ArrayList<String> array = new ArrayList<String>();        if(s==null||s.length()==0) {            result.add(array);            return result;        }        char [][] palindrome_map = new char[s.length()][s.length()];                dp(s, palindrome_map);        dfs(s,0,palindrome_map,array,result);        return result;    }}



2 0
原创粉丝点击