leetcode_middle_92_131. Palindrome Partitioning

题意:

将字符串分割。使每个子串都是回文字符串。返回所有满足条件的分割。


分析:

这个题一眼望去就应该先把问题分解,一是判断子串是否回文。二是搜索。搜索的话,这种情况适合递归深搜。

对于回文判断:传入字符串,一头一尾,两个指针向中间遍历,并比较即可判断。

对于搜索:

我们每次递归中,应该切割字符串,如果切割下来的是回文,就把这部分放入list,并继续将剩下的字符串送入递归。否则尝试下一个切割点。


public class Solution {
        List<List<String>> list;
        List<String> li;
        public List<List<String>> partition(String s) {
            list = new ArrayList<>();
            li = new ArrayList<>();
            helper(s,0);
            return list;
        }
        public void helper(String s, int start){
            if(start == s.length()){
                list.add(new ArrayList(li));
            }
            for(int i=start; i<s.length(); i++){
                if(isPalindrome(s, start, i)){
                    li.add(s.substring(start, i+1));
                    helper(s, i+1);
                    li.remove(li.size()-1);
                }
            }
        }
        public boolean isPalindrome(String str, int l, int r){
            while(l<r){
                if(str.charAt(l) != str.charAt(r)) 
                    return false;
                l++;
                r--;
            }
            return true;
        }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值