最長繰り返し部分文字列の場合LeetCode 1156スワップ

ここでのオリジナルタイトルリンク:https://leetcode.com/problems/swap-for-longest-repeated-character-substring/

トピック:

文字列を考えると  text、我々は、文字列内の文字のうちの2つを交換するために許可されています。繰り返される文字で最長の部分文字列の長さを検索します。

例1:

入力:テキスト=「アベバ」
出力:3 
説明:我々は最後と最初の「B」を入れ替えることができます「」、または最初の「」との最後の「B」。その後、最長繰り返し文字ストリングは、その長さは3である「AAA」、です。

例2:

入力:テキスト=「aaabaaa」
出力:6 
説明:最後とスワップ「B」「」(または最初の「」)、そして私たちはその長さが6である「AAAAAA」のサブストリング最長繰り返し文字を取得。

例3:

入力:テキスト= "aaabbaaa" 
出力:4

例4:

入力:テキスト=「AAAAA」
出力:5 
説明:スワップする必要はありません、最長繰り返し文字ストリングは「AAAAA」で、長さが5です。

例5:

入力:= "ABCDEF"テキスト
出力:1

制約:

  • 1 <= text.length <= 20000
  • text 小文字のみ、英語の文字で構成されています。

ソリューション:

満たさ最長の部分文字列を達成するために、2例があるかもしれません。

ケース1:最長を含む1つのブロック。そして、同じように一方の境界文字を置き換え、そしてGET LEN + 1。

ケース2:同じ文字を含む2つのブロックが1つの異なる文字で区切られました。この場合、1つの異なる文字を置き換えることができます。

どちらの場合も、それは余分に同じ文字があることを確認する必要があります。

時間計算:O(n)を。N = text.length。

スペース:O(n)を。

ACのJava:

1  クラスソリューション{
 2      公共 INT maxRepOpt1(文字列テキスト){
 3          であれば(テキスト== NULL || text.length()== 0 ){
 4              戻り 0 ;
5          }
 6          
7          INT LEN = text.length()。
8          INT []地図は= 新しい INT [26 ]。
9          リスト<ペア> groupsList = 新しい ArrayListを<> ();
10          INT I = 0 11          
12          ながら(I < LEN){
13              チャー C = text.charAt(I)。
14              のint F = 0 15              一方(I <LEN && text.charAt(I)== C){
 16                  F ++ 17                  I ++ ;
18              }
 19              
20              groupsList.add(新しい対(C、F))。
21              地図[C-'A '] + = F。
22          }
 23          
24          int型の最大値= 0 25          のためにINT ; J <groupsList.size(); J ++ J = 0 ){
 26             一対CUR = groupsList.get(J)。
27              
28              // 単一のグループ
29              、最大= Math.max(MAX、Math.min(cur.f + 1、マップ[cur.c - '' ]))。
30の             
31              // 二つのグループ
32              であれば(J <groupsList.size() - 2 ){
 33                  であれば(groupsList.get(J + 1).F == 1 && cur.c == groupsList.get(J + 2 ) .C){
 34                      、最大= Math.max(MAX、Math.min(cur.f + groupsList.get(J + 2).F + 1、マップ[cur.c - '' ]))。
35                  }
 36              }
 37          }
 38          
39          リターン最大;
40      }
 41  }
 42の 
43  クラス対{
 44      チャーC。
45      int型F;
46      公衆ペア(チャー C、INT F){
 47          この .C = C。
48          この .F = F。
49      }
 50 }

 

おすすめ

転載: www.cnblogs.com/Dylan-Java-NYC/p/12004508.html