タイトルは、説明
のみS「A」および「B」は2文字の長さを含む文字列をnと、各操作が「」「B」に、またはそれに一度に文字変換(行うことができ「B」は「A」)に設定され、操作の数が、数の限られた動作範囲内で求め上限mを有し、サブストリングの長さは最大連続同一文字を得ることが可能です。
入力説明:
二つの整数の最初のラインN、M(1 <= M <= N <= 50000)、 及び長さの2行目のnだけ'A'と文字列sの'B'を含みます。
説明出力:
Mを超えることなく動作の出力の数は、最大連続全長に'完全または部分「B」サブストリングを得ることが可能です。
図1は、 DEF(変更文字列、目標、M、N): 2 左= 0 3 チェンジ= []を 4 changecount = 0 5 MAXLEN = 0 6 I、J = 0、0 7 ながら、 iは< N: 8 であれば 、文字列 [I] == 対象: 9 、I + = 1 10 他: 11 であれば changecount < M: 12 changecount + = 1 13 changelist.append(I) 14 、I + = 1 15 他: 16 curleng = I - 左 17を 場合 curleng> MAXLEN: 18 MAXLEN = curleng 19 左=チェンジ[J] + 1 20 J + = 1 21 changecount - = 1 22 もし lenの(チェンジ)> J: 23 curleng = N - 左 24 なら curleng> MAXLEN: 25 MAXLEN = curleng 26 リターンmaxlenを 27 28 DEFメイン(): 29 ARY1 =リスト(マップ(INT 。、入力()スプリット())) 30 N、M = ARY1 [ 0 ]、ARY1 [ 1 ] 31 列 = 入力( ).strip() 32 C1 =変化(文字列、' B ' 、M、N) 33 C2 =変化(文字列、' ' 、m、n)が 34 であれば、C1> = C2: 35 プリント(C1) 36 他: 37 プリント(C2) 38 39 もし __name__ == ' __main__ ' : 40 (メイン)
アルゴリズムのアイデア:ダブルポインタ、スライディングウィンドウ。
質問の意味によると、我々は両方の変換をしようとする必要があります。1.「」変換する「B」、2「b」を「A」を変換します...
各変換のためには、スライディングウィンドウM変換領域内で行われます。m番目の変換が完了すると、現在の領域の長さ、およびスライディングウィンドウを計算します。