1. 程式人生 > >Leetcode047--所有迴文子串的組合

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--所有組合

一、原題 Given a string s, partition s such that every substring of the partition is a palindr

LeetCode:647. Palindromic Substrings(找出字串中所有)

      Given a string, your task is to count how many palindromic substrings in this string.       The substrings with

leetcode5:Longest Palindromic Substring最長

python版: class Solution: def longestPalindrome(self, s): """ :type s: str :rtype: str """ start = en

【HDU - 3068】最長(Manacher演算法,馬拉車演算法求最長

題幹: 給出一個只由小寫英文字元a,b,c...y,z組成的字串S,求S中最長迴文串的長度.  迴文就是正反讀都是一樣的字串,如aba, abba等 Input 輸入有多組case,不超過120組,每組輸入為一行小寫英文字元a,b,c...y,z組成的字串S  兩

最長DP

給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為1000。 示例 1: 輸入: "babad" 輸出: "bab" 注意: "aba"也是一個有效答案。 示例 2: 輸入: "cbbd" 輸出: "bb" 分析:dp    dp[ j ][ i

【探索-中級演算法】最長

這一題可以參考:647. 迴文子串 本質上是一樣的,要判斷出所有的迴文字串,然後找到其中最長的那一個。 中心擴充套件法 中心擴充套件就是把給定的字串的每一個字母當做中心,向兩邊擴充套件,這樣來找最長的子迴文串。演算法複雜度為O(N^2) public Stri

【LeetCode】647.

題目連結:https://leetcode-cn.com/problems/palindromic-substrings/description/ 題目描述 給定一個字串,你的任務是計算這個字串中有多少個迴文子串。 具有不同開始位置或結束位置的子串,即使是由相同的字元組成,也

LeetCode5最長

這兩天被這個題弄得是有些崩潰了,因為之前試的兩種方法都是超時了,所以弄得後面都有些不想弄了。還好有度娘,最後用的是從中間往兩邊擴充套件的方法得此解決,真的是如釋重負啊!廢話不說,講正文貼程式碼。 題目如下: 給定一個字串 s,找到 s 中最長的迴文子串。你可以假

最長(Longest Palindromic Substring)

題目描述: 給出一個字串(假設長度最長為1000),求出它的最長迴文子串,你可以假定只有一個滿足條件的最長迴文串。 樣例 給出字串 "abcdzdcab",它的最長迴文子串為 "cdzdc"。 挑戰 O(n2) 時間複雜度的演算法是可以接受的,如果你

演算法學習——尋找字串中的最長

文章轉載自公眾號《網際網路偵查》 /** * @author xiaoshi on 2018/9/24. * Happy Mid-Autumn Festival */ public class PlalindromeString { // 判斷一個字串是否迴文,演算法中用

LeetCode 5最長(java程式碼)

方法一:動態規劃       定義P(i,j):如果字串從i位置到j位置是迴文,P(i,j)=true;否則,P(i,j)=false;      那麼P(i,j)= P(i+1,j−1) && Si==Sj &

leetcode 5最長的

‘’’ 給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為1000。 示例 1: 輸入: “babad” 輸出: “bab” 注意: "aba"也是一個有效答案。 示例 2: 輸入: “cbbd” 輸出: “bb” ‘’’ class Solution

最大連續序列和/最長不下降序列/最長公共序列/最長

//最大連續子序列和 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 10010; int A[maxn],dp[maxn]; int main(){ int

最長--演算法思想探討和實現(python java)

最長迴文子串–演算法思想探討和實現(python java) 迴文串定義: 如果一個字串正著讀和反著讀是一樣的,那它就是迴文串。 下面是一些迴文串的例項: 12321 a aba abba aaaa tattarrattat 問題定義 最長迴

leetcode5:最長

1 題目 給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為1000。 示例 1: 輸入: “babad” 輸出: “bab” 注意: "aba"也是一個有效答案。 示例 2: 輸入: “cbbd” 輸出: “bb” 題目連結: https

leetcode演算法題—golang—最長(題5)

題目:最長迴文子串 給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為1000。 示例 1: 輸入: "babad" 輸出: "bab" 注意: "aba"也是一個有效答案。 示例 2: 輸入: "cbb

LetCode: 5. 最長

提示 LintCode中的相關演算法題實現程式碼,可以在我的GithHub中下載。 題目需求 給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為1000。 示例 1: 輸入: "babad" 輸出: "ba

Leetcode 336. Palindrome Pairs 給出一種遍歷字串中心的方法

題意 給你n個不同的字串,讓你找出所有的字串對(i, j),使得s(i) + s(j)是迴文串且i不等於j 思路 這題沒有給資料範圍,所以你其實不知道應該給什麼複雜度的演算法,我看了眼Discussion,先確定了下需要的複雜度 複雜度是O(n *

leetcode-5-最長(longest palindromic substring)-java

題目及測試 package pid005; /*最長迴文子串 給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為1000。 示例 1: 輸入: "babad" 輸出: "bab" 注意: "aba"也是一個有效答案。 示例 2: 輸入: "cbbd" 輸出:

馬拉車演算法(求最長)

1 #include <vector> 2 #include <iostream> 3 #include <string> 4 5 using namespace std; 6 7 string Manacher(string s) {