标签:回溯
Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
For example, given s = "aab"
,
Return
[ ["aa","b"], ["a","a","b"] ]题意:给我们一个字符串,求出所有这个字符串的子串,并且子串都为回文字符串的情况,输出它的集合结果。应用回溯算法,实现代码如下:
public class Solution { /* * 供外部调用 * */ public ArrayList<ArrayList<String>> partition(String s) { ArrayList<ArrayList<String>> result = new ArrayList<ArrayList<String>>(); ArrayList<String> list = new ArrayList<String>(); if (s == null || s.length() == 0) return result; calResult(result,list,s); return result; } /** * 判断一个字符串是否是回文字符串 * i -> str[0] * j -> str[len-1] * i:往后移 * j:往前移 * @param str * @return */ private boolean isPalindrome(String str){ int i = 0; int j = str.length() - 1; while (i < j){ if (str.charAt(i) != str.charAt(j)){ return false; } i++; j--; } return true; } /** * * @param result : 最终要的结果集 ArrayList<ArrayList<String>> * @param list : 当前已经加入的集合 ArrayList<String> * @param str : 当前要chǔ理的字符串 */ private void calResult(ArrayList<ArrayList<String>> result , ArrayList<String> list , String str) { //当chǔ理到传入的字符串长度等于0,则这个集合list满足条件,加入到结果集中 if (str.length() == 0) result.add(new ArrayList<String>(list)); int len = str.length(); //递归调用 //字符串由前往后,先判断str.substring(0, i)是否是回文字符串 //如果是的话,继续调用函数calResult,把str.substring(i)字符串传入做chǔ理 for (int i=1; i<=len; ++i){ String subStr = str.substring(0, i); if (isPalindrome(subStr)){ list.add(subStr); String restSubStr = str.substring(i); calResult(result,list,restSubStr); list.remove(list.size()-1); } } } }
Leetcode:Palindrome Partitioning
标签:回溯
原文地址:http://blog.csdn.net/wolongdede/article/details/44939767