件名の説明:
文字列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れます }