バイトジャンプ校正----プログラミング問題2(Python)


一、テーマ
タイトルの説明
「a」と「b」の2つの文字のみを含む文字列sがあり、長さはnであり、操作のたびに1つの文字を1回変換することができる(1つの「a」を「b」に設定するか、1つの「b」を「a」に設定する).しかし、操作回数に上限mがあり、限られた操作数の範囲内で、最大連続する同じ文字のサブストリングの長さがどのくらい得られるかを問う.
説明を入力:
        n , m (1<=m<=n<=50000),       n    ’a’ ’b’    s。

出力の説明:
           m     ,            ’a’    ’b’     。

例1
入力
8 1
aabaabaa

しゅつりょく
5

説明
     'b'       'b'    'a',       5    'a'   。

二、分析及びコード
題意:aとbからなる文字列を1列与えて、m個のアルファベットを変換することができて、変化した後に連続して同じ文字の最大の長さを求めます
解析:文字aと文字bの存在するメタインデックスをそれぞれ抽出し、max=max(p_a[i+m]-p_a[i-1]-1)とする.ノートに絵を描くとこの道理がわかる.コードは次のとおりです.
[n, m] = [int(x) for x in input().split(' ')]
s = input()
a=s.count('a')
b=s.count('b')
res = 0
p_a = [-1]    #   -1           
p_b = [-1]

for i in range(n):    #  a b   
    if s[i]=='a':
        p_a.append(i)
    else:
        p_b.append(i)
if m>=a or m>=b:
    res = n
else:
    res=0
    for i in range(1,len(p_a)):
        if i+mres:
                res=maxlen
        else:
            break
        
    for i in range(1,len(p_b)):
        if i+mres:
                res=maxlen
        else:
            break
            
print(res)