【ABC122 B】「ATCoder」を解く【Python3】

「AtCoder」解説一覧へ

与えられた文字列Sの部分文字列の中で、最も長いACGT文字列の長さを求める問題です。

提出
s = input()
cnt = 0
ans = 0

for i in s:
    if i in 'ACGT':
        cnt += 1
        ans = max(ans,cnt)
    else:
        cnt = 0

print(ans)

問題文にあるように、Sは「英大文字からなる文字列」ですので、文字列として扱います。

for文を用いて、1文字目から調べ、その文字が「ACGT」のどれかであれば、カウント数を増やします。また、ACGTでない場合にはカウントを0に戻します。

cntがansよりも大きければ、max()で上書きされるので、最後にansを出力します。

【余談】これも正解

余談ですが、この問題は過去にも一度解いていて、その時にはfor文の中身を以下のように書いてました。

for i in range(len(s)):
    if s[i]=="A" or s[i]=="C" or s[i]=="T" or s[i]=="G":
        cnt += 1
        ans = max(ans,cnt)
    else:
        cnt = 0

ゴリ押し感……。

こんな感じに書いても、正解です。

「AtCoder」解説一覧に戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です