【競プロ】過去問精選100問「AtCoder Beginner Contest 122 B - ATCoder」解法
Free-PhotosによるPixabayからの画像

はじめに

このシリーズではレッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】でまとめられている100問をPythonで解いています。

問題

AtCoder Beginner Contest 122 B - ATCoder

ポイント

この問題は全探索を用いて解くことができます。

文字列Sの1文字目から順番にACGTどれかに該当するかを調べ、該当したら候補としてその文字を保存、

該当しなかったらその時点で候補の文字列の長さと現状の最大値と比べ、大きければ上書きします。

コード

def main():
    S = input()
    list_ACGT = ['A', 'C', 'G', 'T']
    result = ''  # 最終的な答えとなる文字列
    candidate = ''  # 候補の文字列

    for i in range(len(S)):  # Sの1文字目から探索する
        if S[i] in list_ACGT:  # ACGTに該当すれば候補に追加
            candidate += S[i]  
        else:
            if len(candidate) > len(result):  # ACGTに該当しなければ候補とresultの文字列を比較
                result = candidate
            candidate = ''
        if i == len(S) - 1:  # iが文字列Sの最後尾に達したときも、最後に候補とresultの文字列を比較
            if len(candidate) > len(result):
                result = candidate
            candidate = ''

    print(len(result))
if __name__ == '__main__':
    main()
おすすめの記事