[LeetCode]131. 分割回文串(java实现)dfs爆搜+剪枝
1. 题目

 
2. 读题(需要重点注意的东西)
思路(dfs爆搜+剪枝):
-  爆搜: -  搜索到最后一个字符,将path加到res中 
-  否则每次从u开始爆搜回文子串,搜索到回文子串 [u,i],然后从i+1 的位置 dfs下一个回文子串
 
-  
-  剪枝:判断当前子串 [u,i]是否是回文子串
3. 解法
---------------------------------------------------解法---------------------------------------------------:
class Solution {
    public List<List<String>> res = new ArrayList<>();
    public List<String> path = new ArrayList<>();
    public List<List<String>> partition(String s) {
        if(s.length() == 0) return res;
        dfs(s,0);
        return res;
    }
    // 爆搜
    public void dfs(String s,int u){
        // 搜索到最后一个字符,将path加到res中
        if(u == s.length()){
            res.add(new ArrayList<>(path));
            return;
        }
        // 每次从u开始爆搜回文子串,然后从i+1的位置dfs下一个回文子串
        for(int i = u;i < s.length(); i++){
            if(check(s.substring(u,i+1))){
                path.add(s.substring(u,i+1));
                dfs(s,i+1);
                path.remove(path.size() - 1);
            }
        }
    }
    // 判断当前区间是不是回文串
    public boolean check(String s){
        int i = 0, j = s.length() - 1;
        while(i < j){
            if(s.charAt(i) != s.charAt(j)) return false;
            i ++;
            j --;
        }
        return true;
    }
}
可能存在的问题:
4. 可能有帮助的前置习题
5. 所用到的数据结构与算法思想
6. 总结
最坏情况下时间复杂度为指数级别O(2n),可以断定是一个爆搜问题










