1 クラスソリューション: 2 DEF MAXFREQ(自己、S:STR、maxLetters:INT、に、minSize:INT、maxSizeの:INT) - > INT: 3 N = LEN(S) 4 もし N < に、minSize: 5 戻り0 6 、左、右= 0,0 7 #DIC = {} 8つの RES = {} 9 ながら左<= N - に、minSize: 10 のための幅に範囲(に、minSize、maxSizeの+ 1 ): 11 右=は+左幅 12を 場合右> N: 13 休憩 14 #プリント( '幅'、幅は、 '左'、左、 '右'、右) 15 DIC = {} 16 diffcount = 0 17 のための I における範囲(左、右) : 18 CUR = S [i]が 19 であれば CUR ない でDIC: 20 DIC [CUR] = 1 21 diffcount + = 1 22 他: 23 DIC [CUR] + = 1 24 もしdiffcount <= maxLetters: 25 ワード= S [左:右] 26 もし単語ない でRES: 27の RES [単語] = 1 28 他: 29の RES [単語] + = 1 30 他: 31 休憩 32 左+ = 1 33 場合 lenは(RES)> 0: 34 リターンMAX(res.values()) 35 、他: 36 リターン 0
アルゴリズムのアイデア:スライディングウィンドウ。
ウィンドウの範囲の間である[に、minSize、maxSizeの]、左から右へ、左横には、各時間が権利を与えます。
統計は、maxLetters制限を満たしているどのように多くの異なる要素、右側のウィンドウ内の要素を残しました。
条件が満たされた場合のresに格納し、最終的にRES最高数値(値)が表示されますを返します。