分割回文串
题目
给定一个字符串s,将s分割成一些子串,使每个子串都是回文串。
返回s所有可能的回文串分割方案。样例
给出 s = “aab”,返回
题解
回溯法,如s = “aab”,对s进行遍历。
a作为单个字符显然是回文,则将a加入list,继续对”ab”进行递归查找。
第二个a也是回文,则继续将a加入list并继续对”b”进行递归,得到[a,a,b]。
同时进行回溯,由于aa也是回文,则对”b”进行递归查找,得到[aa,b]。
继续回溯,由于aab不是回文,递归结束。
public class Solution {
/**
* @param s: A string
* @return: A list of lists of string
*/
public List<List<String>> partition(String s) {
List<List<String>> result = new ArrayList<List<String>>();
find(s,result,new ArrayList<String>(),0);
return result;
}
private void find(String s,List<List<String>> result,ArrayList<String> list,int start)
{
if (start > s.length()-1)
{
result.add(list);
return;
}
for (int i=start;i<s.length();i++)
{
if (valid(s,start,i))
{
ArrayList<String> ls = new ArrayList<String>(list);
ls.add(s.substring(start,i+1));
find(s,result,ls,i+1);
}
}
}
private boolean valid(String s, int start, int end)
{
while (start <= end)
{
if (s.charAt(start++) != s.charAt(end--))
{
return false;
}
}
return true;
}
}
Last Update 2016.10.12