Match627_DIV2_500
問題概要
文字列が与えられる。
異なる文字(a~z)のペアを文字列から排除していき、最後に、ただ一種類の文字のみ
が2個以上、残るか判定せよ。
文字が残る場合、その文字(HappyLetter)を出力し、残らない場合は'.'(ピリオド)を出力せよ。
提出コード(C#)
class HappyLetterDiv2 { public char getHappyLetter (string letters) { Stack<char> st = new Stack<char> (); int ch_max = 0; char happyLetter = '.'; for (int i = 0; i < letters.Length; i++) { if (st.Contains (letters [i])) { ; } else { st.Push (letters [i]); Console.WriteLine ("push"); } } int cnt = st.Count; for (int i = 0; i < cnt; i++) { char c = st.Peek (); int tmp = letters.Length - letters.Replace (c.ToString (), "").Length; Console.WriteLine ("count=" + i.ToString () + ",tmp=" + tmp.ToString () + ",ch_max=" + ch_max.ToString ()); if (ch_max < tmp) { ch_max = tmp; happyLetter = st.Pop (); } else if (ch_max == tmp) { happyLetter = '.'; st.Pop (); } else { st.Pop (); } } if((happyLetter != '.') && (ch_max > (letters.Length - ch_max))){ ; }else{ happyLetter = '.'; } return happyLetter; } }
反省
時間ギリギリになってしまい、デバッグコードが残っている。
チャレンジフェーズでは、バグが出そうな入力でアタックしまくってしまった。
(チャレンジ失敗すると、自分のPointが下がるのを知ったのはその後。。。)