leetcode1297

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最高数値(値)が表示されますを返します。

おすすめ

転載: www.cnblogs.com/asenyang/p/12079598.html
おすすめ