131. Palindrome Partitioning

题目描述

131. Palindrome Partitioning_第1张图片

解题思路(从左往右循环,从上往下进行递归)

131. Palindrome Partitioning_第2张图片

代码如下所示

public class Solution{
	List> resultLst;
	ArrayList currLst;
	public List> partition(String s){
		resultLst = new ArrayList>();
		currLst = new ArrayList();
		backTrack(s, 0);
		return resultLst;
	}
	public void backTrack(String s, int l){
		//初始的字符串可以被划分,将暂时得到的结果加入到结果集中
		if(currLst.size() > 0 && l >= s.length()){
			List r = (ArrayList) currLst.clone();
			resultLst.add(r);
		}
		//
		for(int i = 1; i < s.length(); i++){
			if(isPalindrome(s,l,i)){
				if(l == i){
					currLst.add(Character.toString(s.charAt(i)));
				}
				else{
					currLst.add(s.substring(l,i+1));
				}
				backTrack(s, i+1);
				currLst.remove(currLst.size()-1);
			}
		}
	}
	//从l和r开始判断这些中间的单词是否是字符串
	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;
	}
}

你可能感兴趣的:(每日编程)