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;
    }
}



發佈了228 篇原創文章 · 獲贊 45 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章