分割回文串(dfs)
给你一个字符串 s
,请你将 s
分割成一些 子串,使每个子串都是 回文串 。返回 s
所有可能的分割方案。
示例 1:
输入:s = "aab" 输出:[["a","a","b"],["aa","b"]]
示例 2:
输入:s = "a" 输出:[["a"]]
提示:
1 <= s.length <= 16
s
仅由小写英文字母组成
class Solution {public List<List<String>> partition(String s) {List<List<String>> res = new ArrayList<>(); // 存所有结果List<String> a = new ArrayList<>(); //一个切割方案dfs(s,0,a,res);return res;}void dfs(String s,int bg,List<String> a, List<List<String>> res){if(bg == s.length()){res.add(new ArrayList<>(a));return;}for(int i=bg; i<s.length(); i++){if(is(s,bg,i)){a.add(s.substring(bg,i+1)); // 加入当前分割结果dfs(s,i+1,a,res); // 递归处理剩余部分a.remove(a.size()-1); // 回溯:撤销选择}}}boolean is(String s, int l ,int r){while(l<r){if(s.charAt(l++)!=s.charAt(r--)){return false;}}return true;}
}
substring(a, b)
语法表示:
返回原字符串中 从索引 a 开始(包含 a),到索引 b 结束(不包含 b) 的子串
它是“左闭右开”区间
a.remove(a.size() - 1);
删除列表 a
中的最后一个元素。