leetcode

    xiaoxiao2021-03-25  78

    题意:

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

    分析:

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

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

    对于搜索:

    我们每次递归中,应该切割字符串,如果切割下来的是回文,就把这部分放入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;         } }

    转载请注明原文地址: https://ju.6miu.com/read-14979.html

    最新回复(0)