kmjp's blog

競技プログラミング参加記です

TopCoder SRM 564 Div2 Easy FauxPalindromes

練習でDiv2 Easyも。
http://community.topcoder.com/stat?c=problem_statement&pm=12325


文字列が回文かどうか判定するよくある問題。
間で連続する文字をまとめる処理が入る。

最初1文字ずつ見てまとめ処理をしてたけど、STLのuniqueで書きなおしてみた。

class FauxPalindromes {
	public:
	string classifyIt(string word) {
		int ok,i;
		int L=word.size();
		
		ok=1;
		FOR(i,L) if(word[i]!=word[L-1-i]) ok=0;
		if(ok) return string("PALINDROME");

		word.erase(unique(word.begin(),word.end()),word.end());
		
		ok=1;
		L=word.size();
		FOR(i,L) if(word[i]!=word[L-1-i]) ok=0;
		if(ok) return string("FAUX");
		
		return string("NOT EVEN FAUX");
	}
};

まとめ

回文の判定って、真ん中まで判定しようとすると偶数奇数でたまに混乱するので、最後まで判定する方がラクだね。