-131の特別なバックトラックLeetcode。回文配列セグメンテーション(回文パーティショニング)

-131の特別なバックトラックLeetcode。回文配列セグメンテーション(回文パーティショニング)


ストリング所与  S Sは サブストリングの数に分割され、各サブストリングは、ストリングパリンドロームです。

戻り  sで  、すべての可能なパーティションスキームを。

例:

输入: "AAB" 
输出:
[ 
  [ "AA"、 "B"]、
  [ "A"、 "A"、 "B"] 
]

分析:文字列の分割の要件を考慮すると、文字列のすべてを必要とするには、パリンドローム配列をセグメント化されています。
バックトラック、各DFS二つのブランチ1を用いて、図2に示すように、分周スプリットを押し続けていない

文字列strの機能コードを記憶されたDFSを、N個のストレージの合計の長さである、ステップは今では今うち分割された、現在の位置を保持しています文字列は、
残りの文字列がまだ分割されていないままであり、リストは、現在セグメントが充填されている

文字列がパリンドロームであるか否かを決定するためにさらに機能。

クラスのソリューション{ 
    リスト <リスト<文字列>> ANS = 新しい ArrayListを<> (); 

    パブリックリスト<リストの<string >> パーティションは、(文字列S){
         場合(s.length()== 0 || S ==のNULL ){
             戻りANSを、
        } 
        DFS(S、s.length()、 0、 ""、S、新規のArrayList <ストリング> ());
        戻るANSを。
    } 

    公共 ボイド DFS(文字列strの、INT nは、整数、ステップ、文字今、列まま、
            のArrayList <ストリング> のリスト){ 
        
        
        もし(N == ステップ){ 

            場合(!now.equals( "")&& isPalindrome(現在)){ 
                list.add(今)。
                ans.add(新しい ArrayListを<> リスト)); 
                list.remove(はlist.size() - 1 )。
            } それ以外の 場合(!remain.equals( "")&& isPalindrome(まま)){ 
                (まま)list.add。
                ans.add(新しい ArrayListを<> リスト)); 
                list.remove(はlist.size() - 1 )。
            } それ以外の 場合(はlist.size()!= 0 && String.join( "" リスト)。
                 
                ans.add(新しい ArrayListを<> リスト)); 
            } 
            
            を返します
        } 
        
        DFS(STR、N、ステップ + 1、今+ str.charAt(ステップ)、
                remain.replaceFirst(str.charAt(ステップ) + ""、 "" )、リスト)。

        もし(!now.equals( "")&& isPalindrome(今))、{
 //             するSystem.out.println(ステップ+ " "+今すぐ+"" +残ります)。
            list.add(今)。
            DFS(STR、N、ステップ + 1、remain.charAt(0)+ ""、remain.replaceFirst(remain.charAt(0)+ ""、 "" )、リスト)。
            list.remove(リスト。サイズ() - 1 )。
            
        }

    } 

    パブリック ブールisPalindrome(文字列str){ 

        ためint型 I = str.length() - 1、J = 0; I> = 0 && J <= str.length()&& I = J; i--、J ++!){
             もし!(str.charAt(I)= str.charAt(J)){
                 返す 
            } 
        } 
        戻り 
    } 
}

 

おすすめ

転載: www.cnblogs.com/qinyuguan/p/11330193.html