【C#】AtCoder Beginner Contest122 B - ATCoder をC#で解いてみた【AtCoder】
サンプルプログラム
static void Main(string[] args) { var S = Console.ReadLine(); List<string> ACGT = new List<string> { "A", "C", "G", "T" }; bool[] b = new bool[S.Length]; var ans = 0; for (int i = 1; i <= S.Length; i++) { //退避 var _b = b; foreach (var item in ACGT) { if (Convert.ToString(S[i - 1]) == item) { _b[i - 1] = true; b = _b; break; } } //ACGT以外の文字だったら if (_b[i - 1] == false) { ans = Math.Max(ans, _b.Count(p => p)); b = new bool[S.Length]; } } ans = Math.Max(ans, b.Count(p => p)); Console.WriteLine(ans); }
軽く解説
入力した文字の文字数分のbool型配列を作り、初期値は全てfalseとする。
一文字ずつA、C、G、Tが含まれているかを調べ、含まれていたらtrueにする。
含まれていなかったらfalseとし、ansにその時点でのtrueの数を記録する。
bool配列をリセットし、次の文字からまた順番に検査していく。
falseが出てくるたびにansと比べ、最終的に一番大きい数を残し、出力する。
使い方、合ってるかしら('ω')