少なくともK文字の繰り返しとleetcode 395最長サブストリング

少なくともK文字の繰り返しとlc395最長サブストリング

アイデアは、1から26まで、計算する文字のサブストリングの数に応じて異なります

各計算のためのN個の異なる文字は、最長のストリングで構成することができます

最長の部分文字列を記録します

 

単一サイクルは、両手後端トラバーサルSと、ストリングの長さを計算し始めます

見て文字と文字の== N数がkに等しい発生数よりも大きいです

DESCRIPTION開始〜このストリングの末尾には、MAXLENを更新し、一致しました

その後、>場合は、それが==なるように、後方に移動することを開始します

<演算子を必要としない場合

 

1  クラスソリューション{
 2      公共 のint longestSubstring(文字列s、int型K){
 3          であれば(s.length()== 0 || s.length()< K)
 4              戻り 0 ;
5          int型の最大値= 0 ;
図6は、         のためにint型 i = 1; iは<= 26; I ++ ){
 7              マックス= Math.max(MAX、ヘルパー(S、K、I))。
8          }
 9          
10          戻りマックス。
11      }
 12      
13      プライベート int型ヘルパー(文字列S、INTK、INT abcNum){
 14          のint []カウント= 新しい INT [128 ]。
15          INT始める= 0、終了= 0 16          INT seenChar = 0、noLessThanK = 0 17の         INTは RES = 0 18          
19          一方(端< s.length()){
 20              であれば(カウント[s.charAt(終了)] ++ == 0 21                  seenChar ++ 22              場合([s.charAt(端++)] ==カウントK)
 23                  noLessThanKを++ 24              
25             / * {(seenChar> abcNum)一方、
 26                  ([s.charAt(開始)]カウント- == k)の場合は
 27                      noLessThanK--。
28                  ([s.charAt(++開始)] == 0をカウント)であれば
 29                      seenChar--。
30              } * / 
31              ながら(seenChar> abcNum){
 32                  場合(カウント[s.charAtが(開始)] - == 1 33                      seenChar-- 34                  であれば(カウント[s.charAtは(開始++)] == K-1 35                      noLessThanK-- 36              }
 37             
38              であれば(seenChar == noLessThanK && seenChar == abcNum)
 39の                  RES = Math.max(RES、エンド始めます)。
40          }
 41の         
42          戻りRES。
43      }
 44 }

 

おすすめ

転載: www.cnblogs.com/hwd9654/p/11009640.html