問題概要
文字列 S が与えられる。S から一種類の文字を全て削除する操作が任意回できる。文字列 "CAT" を作ることができるかどうか、求めよ。
解法
まず、'C', 'A', 'T' のいずれでもないような文字は全て削除する必要があります。この削除後に残った文字は全て "CAT" に必要な文字なので、これ以上削除することはできません。従って、残った文字列が "CAT" であれば "Possible" 、そうでなければ "Impossible" です。
コード
#define ALL( c ) (c).begin(), (c).end() class TaroString { public: string getAnswer( string S ) { S.erase( remove_if( ALL( S ), [&]( const char c ){ return string( "CAT" ).find( c ) == string::npos; } ), S.end() ); return S == "CAT" ? "Possible" : "Impossible"; } };