我的程序:
クラスのソリューション(オブジェクト): デフlongestPalindrome(自己、秒): "" " :タイプS:STR :RTYPE:STR """ もし S == '' : リターン '' 場合でlen(s)は== 1 : リターン秒の 解像度を = [] のために、私は中範囲(lenが(S)): = cで。S [I:]カウント(S [i])と あれば 、C = 1! : B = sの[:: - 1 ]。インデックス(S [i])と J = LEN(S)-b-1 であればS [I:J + 1] == S [I:J + 1] [:: - 1] と I =!J: res.append(S [I:J 1 ]) 他: C - = 1 トン = S [I:J] 場合 LEN(T)== 2 : もし T [0] == T [1 ]: res.append(t)は ブレーク 他: ブレーク B [:: - 1 = T ] .INDEX( T [0]) J = LEN(T)-b-1の 場合のt [:J + 1] == Tの[:J + 1] [:: - 1] とJ =!0: res.append(Tの[:J +1 ]) C- = 1 一方、 C> 1 : のT =秒:[I iが+ j]を場合 lenは(T)== 2 : もし T [0] = = T [1 ]: res.append(T)破る他: ブレーク B = T [:: - 1 ] .INDEX(T [0]) J = LEN(T)-b-1の 場合のt [:J + 1 ] ==トンの[:J + 1] [:: - 1] と J =!0: res.append(Tの[:J +1 ]) C- = 1 であれば LEN(RES)== 0: リターンS [0] であれば LEN(RES)== 1 : 戻りRES [0] 、M = MAX(LEN( RES [i])とするための I における範囲(LEN(RES))) のための I における範囲(LEN(RES)) 場合でlen(RES [i])と== M: 戻り RES [I]
実行時:2192ミリ秒は、Pythonの提出内のすべてのユーザーの50.51パーセントを打ちます
メモリ消費量:115.1メガバイトは、Pythonの提出内のすべてのユーザーの5.06パーセントを打ちます
約2時間でそれを行うことは容易ではないが、しかし、非常に長いったらしい場所が残っていました。
20の実行である場合にMS例の
クラスソリューション(オブジェクト):
DEF longestPalindrome(セルフ、S):
"" "
:タイプS:STR
:RTYPE:STR
" ""
IF LEN(S)< 2 又はS == S [: :-1]:
Sを返します
長さ = 1 even_medium = 0 even_left = 0の ための I における範囲(LEN(S) - 1 ): もし I - even_left> = 0 と S [I - even_left] == S [I + 1 ]: サブストリング = sで[I - even_left:I + 2 ] であればサブ==サブ[:-1 ]: even_medium = Iの 長さ = even_left + 2 even_left = even_left + 2 odd_medium =0 半分 =(長さ+ 1)// 2 odd_left =(長さ+ 1)// 2 のための J における範囲(半分、LEN(S) - 半分): もし J - odd_left> = 0 と S [J - odd_left] == S [J + ハーフ]: サブストリング = sの[J - odd_left:J +半分+ 1 ] であれば、[:-1サブ==ストリング]: odd_medium = Jの 長さ = odd_left +半分+ 1 odd_left = odd_left + 2 もし長%2 == 0: リターン S [even_medium + 2 -長さ:even_medium + 2 ] 他: もし長さ== 1 : リターンS [0] 他: 戻り S [odd_medium +半分+ 1 -長さ:odd_medium +半分+ 1]
分析と改善:
私のプログラムの内部
もし S == '' : リターン '' 場合でlen(s)は== 1 : リターン・ S
に置き換え:
もし LEN(S)<2 又は S == S [:: - 1 ]: リターンの
他のよく見ていません。。。。
--2019.10.11