131. Palindrome Partitioning
一、题目描述:
这里主要说的概念是回文; 回文比如说“aba”,正着扫描和反着扫面,字符串一致。所以就是要输入一个String,返回所有可能的回文集合;
二、解题思路:
解决这道题,首先想到有两个方面:一个是检查截取字符串是否满足回文要求;另一个就是扫面字符串。
下面有个图,可以更好的理解这道题。这里我们可以选择动态规划或者递归找到要求的回文集合。
三、java代码:
public class Solution {
List<List<String>> result; //储存最后的result
ArrayList<String> temp; //每次递推满足回文要求的String集合
public List<List<String>> partition(String s) {
result = new ArrayList<List<String>>();
temp = new ArrayList<String>();
backTrack(s,0);
return result;
}
public void backTrack(String s, int l) {
if(temp.size() > 0 && l >= s.length()) { //结束递归:temp里的不为空,同时已经扫描完整个字符串
List<String> r = (ArrayList<String>)temp.clone();
result.add(r);
}
for(int i=l; i<s.length(); i++) {
if(isPalindrome(s, l, i)) {
temp.add(s.substring(l,i+1));
backTrack(s,i+1); //深度搜索
temp.remove(temp.size()-1);
}
}
}
public 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;
}
}