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が下がるのを知ったのはその後。。。)