はまやんはまやんはまやん

hamayanhamayan's blog

ATCoder [AtCoder Beginner Contest 122 B]

https://atcoder.jp/contests/abc122/tasks/abc122_b

解説

https://atcoder.jp/contests/abc122/submissions/4702739

Sの長さがとても短いので、Sの部分文字列すべてについて考えることができる。
部分文字列S[L...R]について、ACGT文字列であるかを判定するには、全ての文字において、
"ATCG"のいずれかでないことを判定すればいい。
これはT="ATCG"とおけば、Tの中ならある文字が存在するかを判定すればいい。
部分文字列のある文字について、stringのfindメソッドで検索して、存在しない文字があれば、
"ATCG"のいずれかではないので、条件を満たさないものとする。
あとは、条件を満たす部分文字列の長さの最大値を答えればいい。

string S; int N;
string T = "ATCG";
//---------------------------------------------------------------------------------------------------
void _main() {
	cin >> S;
	N = S.length();
 
	int ans = 0;
	rep(L, 0, N) rep(R, L, N) {
		int ok = 1;
		rep(x, L, R + 1) if (T.find(S[x]) == string::npos) ok = 0;
		if (ok) chmax(ans, R - L + 1);
	}
	cout << ans << endl;
}