ブラシタイトルLeetCodeノート - 後戻り - セグメンテーション回文配列

件名の説明:

文字列sは、sはサブストリングの数に分割されて与えられた、各サブストリングは、ストリングパリンドロームです。

Sは、すべての可能なパーティションスキームを返します。

例:

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

出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/palindrome-partitioning

問題解決のアイデア:

1、明らかにバックトラッキング:すべての可能な結果と結果を行うには、リスト<リスト<>>タイプです。

2ので、この質問とサブセットを求めるには、裁判官が回文文字列ではありませんように、それぞれ自身の知識と非常によく似ています。

図3は、文字列を処理する容易にする(INT、INT端、文字列ターゲットを開始する)機能バックhuisuを用いて決定されることに注意してください

以下を達成するためのJavaコード

1  // 回文字符判断
2      公共 ブール isPalindrome(文字列s、int型開始、INT 端){
 3          ながら(<開始端)を{
 4              もし(s.charAt(開始)!= s.charAt(終了))
 5                  リターンを ;
6              ++開始7              end-- 8          }
 9          リターン 10      }
 11  
12      公衆リスト<リストの<string >> パーティション(文字列S){
 13          //求出所有子集
 14          // 判断是不是回文
15          リスト<リスト<文字列>>結果= 新しい ArrayListを<> ();
16          リスト<文字列> TEMP = 新しい ArrayListを<> ();
17          部(その結果、TEMP、S、0 );
18          リターン結果;
19      }
 20  
21      公衆 空隙部(リスト<リストの<string >>結果、リストの<string> TEMP、ストリングS、INT 開始){
 22          であれば(開始== s.length()){
 23              result.add(新規のArrayList (TEMP))。  //最初のそれ以外の場合は、加算結果への参照が返されている空である、メモリに適用しなければなりません。
24              返す ;   // 処理は、我々は返す必要があります完了です!
25          }
 26である         ためint型 ; Iは、(s.lengthを<)I ++は私が始まる= {)
 27              IF (isPalindrome(S、開始、I)){
 28                  temp.add(s.substring(開始は、I + 1。 ));
 29                  パート(結果、TEMP、Sは、I + 1。);
 30                  temp.remove(temp.size() - 1 );
 31である             } 
34れます          }

 

   

 

おすすめ

転載: www.cnblogs.com/sqchao/p/11070140.html