問題の説明:
文字列を考えると、あなたは、繰り返し文字の最長の文字列のサブ長さを含んでいないかを調べます。
例1:
入力:「abcabcbb」
出力:3
説明:その長さは3であるので、重複のない文字の最長のサブは、「ABC」であるため。
例2:
入力:「BBBBB」
出力:1つの
説明:最長の部分文字列は、その長さが1であるように、「B」のない文字が繰り返されているので。
例3:
入力:「pwwkew」
出力:3
説明:その長さが3であるので、「WKE」せずに文字を繰り返し最長のサブ文字列がされているので。
、「pwkeは」サブシーケンスではなく、部分文字列であるあなたの答えは、長さの部分文字列でなければならないことに注意してください。
慣例により、最初は私たちのスライディングウィンドウ法の簡易版です。
クラスソリューション: DEF lengthOfLongestSubstring(セルフ、S:STR) - > INT: TMP = 0 #最大値を得るための条件を記録する ための I における範囲を(1、(S)+ +1 LEN): #の1からLENにステップ(S)+ +1 用 J における範囲(LEN(S)-i + 1):#1 ウィンドウ左 IF LENを(SET(S [J:J + I]))== LEN(S [J:J + I] ): #ウィンドウの長さと同じセットを取った後、元の長さであれば、ウィンドウは何の繰り返し文字ではないことを示す TMP = MAX(TMP、I) #TMPの更新値 リターンのtmp #最終的に戻りました
結果を見て、まだタイムアウトが、その後:
あなたはタイトルはそれをしたい場合にのみ、1のユースケースは、スライディングウィンドウ、シンプルで原油の簡易版を渡しませんでした。
スライディングウィンドウによってアップグレードを使用する必要がありますする:左境界開始、最大MAX_NUMレコード、現在のレコードが横断サブストリングのハッシュを得ました。左からアレイを介し、最初の繰り返しの文字があったかどうかを判断するためにどのようにして、ハッシュに追加しますか?長い時間のようなビットは、ハッシュテーブルはハッシュテーブルと価値の長さよりも短いが、文字、仕事の左端に今回の説明が繰り返されていた場合は、キーを取得するために巧妙な方法を考えているので、左マージンに対応する文字反復がある場合、ハッシュ値の低下は、文字の値が0になった場合、この時点で、キーの長さは、ハッシュテーブルの価値に等しくなるまで除去され、1だけデクリメント、+ = 1開始します最大電流マッチングを記録します。
クラスソリューション: DEF lengthOfLongestSubstring(セルフ、S:STR) - > int型: IF LEN(S)== 0: リターン0 IF。LEN(S)1 == : リターン 1。 スタート = 0 #スライディングウィンドウは左 MAX_NUM = 0 #とし最大値を算出する からコレクションをインポートdefaultdictを ハッシュ = defaultdict(int)を するための I 中範囲(LEN(S)): ハッシュ[S [I] + 1 =。 ながら lenを(ハッシュ)<self.dictSum(ハッシュ): ハッシュ[S [開始] - = 1の 場合はハッシュ[S [開始]] == 0: デルハッシュ[S []スタート] 起動 + = 1 MAX_NUM = MAX(MAX_NUM、I-開始+1 ) リターンMAX_NUM DEF dictSum(自己、DIC): 和 = 0 のための I におけるDIC: 合計 + = DIC [I] 戻り和
結果:
ビット悲惨なものの、しかし、どのような結果、それは最初に出てきたん。