【LeetCode】#131分割回文串(Palindrome Partitioning)
题目描述
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例
输入: “aab”
输出:
[
[“aa”,“b”],
[“a”,“a”,“b”]
]
Description
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 {
List<List<String>> res = new ArrayList<>();
public List<List<String>> partition(String s) {
if(s==null || s.length()==0)
return res;
helper(s, new ArrayList<>(), 0);
return res;
}
public void helper(String s, List<String> list, int l){
if(l==s.length()){
res.add(new ArrayList<>(list));
return;
}
for(int i=l; i<s.length(); i++){
if(isPalindrome(s, l, i)){
list.add(s.substring(l, i+1));
helper(s, list, i+1);
list.remove(list.size()-1);
}
}
}
public boolean isPalindrome(String s, int l, int r){
while(l<r && s.charAt(l)==s.charAt(r)){
l++;
r--;
}
return l>=r;
}
}