Given a string s, partition s such that every substring of the partition is a palindrome. Return all possible palindrome partitioning of s.

Example: Input: "aab" Output: [ ["aa","b"], ["a","a","b"] ]

class Solution {
    public List<List<String>> partition(String s) {
        List<List<String>> res = new ArrayList<>();
        List<String> cur = new ArrayList<>();
        dfs(s, 0, cur, res);
        return res;
    }

    private void dfs(String s, int start, List<String> cur, List<List<String>> res) {
        if(start == s.length()) {
            res.add(new ArrayList<String>(cur));
            return;
        }
        for(int i = start; i < s.length(); i++) {
            if(isPal(s, start, i)) {
                String palSec = s.substring(start, i + 1);
                cur.add(palSec);
                dfs(s, i + 1, cur, res);
                cur.remove(cur.size() - 1);
            }
        }
    }

    private boolean isPal(String s, int start, int end) {
        while(start < end) {
            if(s.charAt(start++) != s.charAt(end--)) {
                return false;
            } 
        }
        return true;
    }
}

method 2.与上面方法类似,省去指针,每次传string都是传去掉前面palindromic部分
class Solution {
    public List<List<String>> partition(String s) {
        List<List<String>> res = new ArrayList<>();
        List<String> cur = new ArrayList<>();
        dfs(s, cur, res);
        return res;
    }

    private void dfs(String s, List<String> cur, List<List<String>> res) {
        if(s.length() == 0) {
            res.add(new ArrayList<String>(cur));
            return;
        }
        for(int i = 0; i < s.length(); i++) {
            String sub = s.substring(0, i + 1);
            if(isPal(sub)) {
                cur.add(sub);
                dfs(s.substring(i + 1, s.length()), cur, res);
                cur.remove(cur.size() - 1);
            }
        }
    }

    private boolean isPal(String s) {
        for(int i = 0; i < s.length() / 2; i++) {
            if(s.charAt(i) != s.charAt(s.length() - 1 - i)) {
                return false;
            } 
        }
        return true;
    }
}

results matching ""

    No results matching ""