Leetcode047--所有回文子串的组合

Posted 劲火星空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode047--所有回文子串的组合相关的知识,希望对你有一定的参考价值。

一、原题



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"]
  ]



一、中文



找到一个字符串中所有可能的回文子字符串的组合



三、举例



比如字符串aab,就可以分成 "aa" "b" 和 "a" "a" "b" 两种情况



四、思路



首先要编写一个函数,判断这个函数是否是回文串,然后就可以方便的调用这个函数了。然后就是遍历字符串了,如果字符串从0到第i个位置是一个回文串,然后再使用递归的方式判断后边的字符串,直到字符串的长度为0了就可以了,这个list中就是一套完整的方案了,然后将这个list装入res集合中,依次这样递归,最后返回就可以了。


五、程序



import java.util.*;
public class Solution 
    public ArrayList<ArrayList<String>> partition(String s) 
        ArrayList<ArrayList<String>> res = new ArrayList<>();
        ArrayList<String> list = new ArrayList<>();
        addPalin(res,list,s);
        return res;
    
    
    public static void addPalin(ArrayList<ArrayList<String>> result,ArrayList<String> list,String s)
        //当list==0的时候也就是说明这个字符串已经按照相应的的序列分好了
        //此时可以将其加进去了
        if(s.length() == 0)
            result.add(new ArrayList<String>(list));
        
        for(int i = 1; i <= s.length(); i++)
            if(!isPali(s.substring(0,i)))
                continue;
            
            //这里是从下标0-(i-1)的子串
            list.add(s.substring(0,i));
            //这里是从下标i开始的子串
            addPalin(result,list,s.substring(i));
            //这里的移除是为了重新装入新的字符串
            list.remove(list.size()-1);
        
    
    
    public static boolean isPali(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;
    



以上是关于Leetcode047--所有回文子串的组合的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode最长回文子串

[LeetCode] 最长回文子串

LeetCode 5 最长回文子串

查找给定字符串的所有前缀的最长回文子串的长度

WHU 583 Palindrome ( 回文自动机 && 本质不同的回文串的个数 )

leetcode 回文子串 中等