きままにものづくり

日々の気付いたことなんかを書いてます。

SRM627Div1Easy

問題

長さN( N \leq 50)の文字列が与えられる。その中で違う文字同士のペアを取り出す。取り出すペアが無くなった時点で終了となり、この時に残っている文字をwinning letterと呼ぶ。winning letterの文字列を辞書順にして求めよ。

解法

サイズが小さいので一文字ずつwinning letterになるかを確認することができる。確認の処理は出現回数が多い文字を2つ取り出しそれぞれから1を引くという処理をして、最後に残った数字と注目してる文字の出現回数を比較することで実現できる。
実装が簡単になるのでpriority_queを使用している。

計算量

 O(MNlogM)
N: 文字列の長さ
M: アルファベットの数(a-zの26文字)
 O(M): 文字の全探索
 O(N): 確認の処理
 O(logM): priority_que(Binary Search Tree)の挿入コスト

コード