// LeetCodeからオリジナルタイトル
最長のサブパリンドロームを返す文字列、与えられました
この質問は、現在の電流容量によって制限され、一時的な解決策は、条件のみを満たすために解決策を見つけるために、サブストリングを横断し、その最も暴力的な解決策を介して取得することができます。次のコードが最適化されていない場合、制限時間は(恥ずかしい、超過試験による103分の96)
インポート; java.util.ArrayList内の インポートjava.util.Listに、 パブリック クラスソリューション{ パブリック文字列longestPalindrome(文字列S){ 文字列結果 = NULL ; IF (isPalindrome(S)) { 戻りSを; } リストの<string> = RES 新しい新 ArrayList <ストリング> (); //直接容器とリスト、条件満足することがスローされるすべてのすべての結果 int型のインデックス= s.lengthを(); int型の長さ= 0 ; のため(int型私は=インデックス<; I = 0。 ++ I) { ための(int型 J =指数; J> = I; j-- ) { 文字列のTEMP = s.substring(i、j)は、 もし(isPalindrome(TEMP)) { res.add(TEMP)。 } } } のために(文字列str:RES) { 場合(str.length()> = 長さ) { 長さ = str.length()。 結果 = STR。 } } 戻り値の結果; } 公衆 ブールisPalindrome(文字列S) { int型 LEN = s.length()。 以下のために(int型 ;私は/ 2でlen <; I = 0私は++ ) { 場合(s.charAt(I)= s.charAt(LEN -1-!I)) { 返す 偽。 } } 戻り 真。 } }
アイデアは簡単ですが、それはいくつかのトラバーサルを通過することです、あまりにも多くの時間を要し、のみに基づいて最適化することができます。
輸入はjava.util.ArrayList; 輸入はjava.util.List; パブリック クラス溶液{ パブリック文字列longestPalindrome(文字列S){ 文字列結果 =「」; もし(isPalindrome(S)) { リターンS。 } int型のインデックス= s.length()。 int型の長さ= 0 。 以下のために(int型 i = 0; iが<=インデックスを、iは++ ) { ための(int型 J =指数; J> = iは、j-- ) { 文字列TEMP= S.substring(I、J); IF(isPalindrome(TEMP)&& temp.length()> 長さ) { 長さ = temp.length(); 結果 = TEMP; BREAK ; //これはサイクルIの外にある原因文字列を横断するのに非常に終わりから、遭遇した条件を満たすために最初は、確かに最長の長さ }
文字列の残りの長さで//バックがあっても、現在の結果よりも、短期的に比較する必要はありませんテキスト文字列は、現在の結果の長さよりも長くない IF(J - I> = 長さ) { BREAK ; } } } 戻り結果; } 公共 ブールisPalindrome(文字列s) { int型 LEN = s.length()。 以下のために(int型 ;私は/ 2でlen <; I = 0私は++ ) { 場合(s.charAt(I)= s.charAt(LEN -1-!I)) { 返す 偽。 } } 戻り 真。 } }
これは、現在、実際に未来は唯一の最適化のために再び大きな神を助けることができる、任意の他の独創的な解決策を考えるされていません。