您的位置:首页 > 其它

LeetCode Palindrome Partitioning

2015-09-13 02:22 344 查看
原题链接在这里:https://leetcode.com/problems/palindrome-partitioning/

本题与Word Break II相似。

用递归解决子问题,如果是Palindrome就加进item,然后递归调用helper, 递归终止条件是能正好走到s.length().

Note:1. 用的item是一个list, 实际上是一个指针, 所以递归调用完需要回朔,也就是减掉最后一个点。

2. 当正好走到s.length()时加item需要加item的copy, 否则后面更改item, 已经加到res里的item也会改变。

Time Complexity: exponential.

AC Java:

public class Solution {
public List<List<String>> partition(String s) {
List<List<String>> res = new ArrayList<List<String>>();
if(s == null || s.length() == 0){
return res;
}
helper(s,0, new ArrayList<String>(),res);
return res;
}
private void helper(String s, int start,List<String> item, List<List<String>> res){
if(start == s.length()){
res.add(new ArrayList(item));
return;
}
StringBuilder sb = new StringBuilder();
for(int i = start; i <s.length(); i++){
sb.append(s.charAt(i));
if(isPalindrome(sb.toString())){
item.add(sb.toString());
helper(s,i+1,item,res);
item.remove(item.size()-1);
}
}
}
private boolean isPalindrome(String s){
if(s == null || s.length() == 0){
return true;
}
int i = 0;
int j = s.length()-1;
while(i<j){
if(s.charAt(i) != s.charAt(j)){
return false;
}
i++;
j--;
}
return true;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: