2014 TCO Round 1C Easy - Unique (○)

問題


http://community.topcoder.com/stat?c=problem_statement&pm=13067&rd=15958

・ある文字列が与えられる。
・そのうち、同じアルファベットは一度しか使わないようにしたい。
・同じアルファベットが出現する場合、最初のアルファベットのみ残すようにしたときに
 最後に残る文字列を求める。

解き方


単に実装するだけ。
アルファベットの出現回数を保持する配列を持っておき、
初めて出現するアルファベットのみ答えに足していけばよい。

コード


using namespace std;

#define all(c) (c).begin(),(c).end()
#define FORE(i,d,e) for(int i=d;i<e;i++)
#define FOR(i,s,e) for (int i = int(s); i != int(e); i++)
#define FORIT(i,c) for (typeof((c).begin()) i = (c).begin(); i != (c).end(); i++)
#define ISEQ(c) (c).begin(), (c).end()

class Unique {

public: string removeDuplicates(string S) {
string ret="";
int n=S.size();
int ch[26];
memset(ch,0,sizeof(ch));

FORE(i,0,n){
if(ch[S[i]-'a']==0){
ret+=S[i];
ch[S[i]-'a']++;
}
}

return ret;
}

};
このエントリーをはてなブックマークに追加