LeetCode 131. Palindrome Partitioning 分割回文串(Java)

题目:

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”]
]

解答:

这是一道递归回溯的题目。
通过回溯找到所有的回文字符串,其中,index之前的都是分割好的回文字符串且存储进了list,从index之后寻找下一个回文字符串,当index == s.length()时,当前递归结束。其中,通过isPalindrome()方法判断一个一个字符串是否为回文字符串。

class Solution {
    public List<List<String>> partition(String s) {
        List<List<String>> res = new ArrayList<>();
        List<String> list = new ArrayList<>();
        backTracking(s, res, list, 0);
        return res;
    }
    public void backTracking(String s, List<List<String>> res, List<String> list, int index) {
        if(index == s.length()) {
            res.add(new ArrayList<>(list));
            return;
        }
        for(int i=index; i<s.length(); i++) {
            String str = s.substring(index, i+1);
            if(isPalindrome(str)) {
                list.add(str);
                backTracking(s, res, list, i+1);
                list.remove(list.size()-1);
            }
        }
    }
    public boolean isPalindrome(String str) {
        for(int i=0; i<str.length()/2; i++) {
            if(str.charAt(i) != str.charAt(str.length()-i-1)) {
                return false;
            }
        }
        return true;
    }
}

你可能感兴趣的:(LeetCode)