torus711 のアレ

主に競技プログラミングの問題について書きます.PC 以外だと数式が表示されないかもしれないです

TopCoder Open 2014, Algorithm, Round 1C, Level 1 : Unique

問題概要

 文字列 S が与えられる。S を先頭から走査したとき、二回目以降に現れる文字を全て削除した文字列を求めよ。

解法

 問題文に書かれたアルゴリズムをそのまま実装することで解くことができます。過去に出現した文字を set などで保持しておくと楽に書くことができます。

コード

#define FOR( e, c ) for ( auto &e : c )
#define EXIST( c, e ) ( (c).find( e ) != (c).end() )

class Unique
{
public:
	string removeDuplicates( string S )
	{
		string res;
		set<char> cs;

		FOR( c, S )
		{
			if ( !EXIST( cs, c ) )
			{
				res += c;
				cs.insert( c );
			}
		}

		return res;
	}
};