問題文
英大文字からなる文字列 S が与えられます。S の部分文字列 (注記を参照) であるような最も長い ACGT 文字列 の長さを求めてください。
ここで、ACGT 文字列とは A, C, G, T 以外の文字を含まない文字列です。
入力と出力
S
S の部分文字列であるような最も長い ACGT 文字列の長さを出力せよ。
ACコード
#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
int main() {
string s;
cin >> s;
int counter = 0;
int maxcnt = 0;
rep(i, s.size()){
// ACCTのいずれかに該当した場合、counter++
if(s.at(i) == 'A' || s.at(i) == 'C' || s.at(i) == 'G' || s.at(i) == 'T') {
counter++;
//最大数と現ループのcounterの数比較
maxcnt = max(counter, maxcnt);
} else {
counter = 0;
}
}
cout << maxcnt << endl;
}
学んだこと
全探索で最大数を求める時はcounterと比較をして、大きい方を保存するmaxcntなどの変数を用意するとよい。