ここで使用される主な方法は、中心が単一の文字とすることができるので、そのようなABBC二文字と類似していてもよい、彼らにポイントを議論する必要がある、すなわち、文字列全体を横断するように、膨張の中心です。
単一の文字である場合、n個のケースが存在する場合、二つの文字場合、n-1個のケースがありました。したがって、ケース内で一緒にそれを2N-1であります
次に、各試験は、次に中心を延長し、最終的に最も長いパリンドローム配列を決定しました。
約開始の中心の位置を決定し、その後、所望の文字列を取得するために直接SUBSTR関数を減算します。
次のようにコードは次のとおりです。
1 クラスソリューション{ 2 公共: 3 INT expandAroundCenter(ストリング S、INT左は、int型右) 4 { 5 int型 L =左、R = 右。 6 一方、(L> = 0 && R <s.length()&& S [L] == S [R]) 7 { 8 L-- 。 9 R ++ 。 10 } 11 リターン RL- 1 。 12 } 13 14 文字列 longestPalindrome(ストリングS){ 15 であれば(s.length()< 1 ) 16 { 17 リターン "" 。 18 } 19 int型開始= 0、終了= 0 。 20 のために(int型 I = 0 ; iが(s.lengthを<)私は++ ) 21 { 22 INT LEN1 = expandAroundCenter(S、I、I)。 23 INT LEN2 = expandAroundCenter(S、I、I + 1 )。 24 int型のlen =MAX(LEN1、LEN2)。 25 であれば(LEN>終了- 開始) 26 { 27 START = I - (len- 1)/ 2 。 28 端= I +(LEN)/ 2 。 29 } 30 } 戻り s.substr(開始、終了-開始+ 1 )。 31 } 32 33 }。
最終的な時間計算量はO(N ^ 2)