131. 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"]
]

一刷
題解:
用backtracking + dfs求解
dfs中需要起始位置,設(shè)置為left, 然后從left到末尾為right的位置,傳入子函數(shù)判斷是否為palindrome。然后以right的下一個作為dfs的子問題的起始位置。

public class Solution {
    private List<String> curList;
    private List<List<String>> res;
    
    public List<List<String>> partition(String str) {
        res = new ArrayList<>();
        curList = new ArrayList<>();
        bt(str, 0);
        return res;
    }
    
    private void bt(String str, int left){
        if(curList.size()>0 && left>=str.length()) res.add(new ArrayList<>(curList));
        
        for(int i=left; i<str.length(); i++){
            if(isPalindrome(str, left, i)){
                if(i == left) curList.add(Character.toString(str.charAt(i)));
                else curList.add(str.substring(left, i+1));//include the i
                bt(str, i+1);
                curList.remove(curList.size()-1);
            }
        }
    }
    
    private boolean isPalindrome(String str, int l, int r){
        if(l == r) return true;
        while(l<r){
            if(str.charAt(l) != str.charAt(r)) return false;
            l++;
            r--;
        }
        return true;
    }
}

二刷
DFS+backtracking

public class Solution {
    
    private List<String> curList;
    private List<List<String>> res;
    
    public List<List<String>> partition(String s) {
        res = new ArrayList<>();
        curList = new ArrayList<>();
        bt(s, 0);
        return res;
    }
    
    private void bt(String str, int left){
        if(curList.size()>0 && left>=str.length()) res.add(new ArrayList<>(curList));
        for(int i=left; i<str.length(); i++){
            if(isPalin(str, left, i)){//include i and left
                if(left == i) curList.add(Character.toString(str.charAt(left)));
                else curList.add(str.substring(left, i+1));
                bt(str, i+1);
                curList.remove(curList.size()-1);
            }
        }
    }
    
    private boolean isPalin(String str, int left, int right){
        if(left == right) return true;//one character
        while(left<right){
            if(str.charAt(left)!=str.charAt(right)) return false;
            left++;
            right--;
        }
        return true;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容