東京海上日動プログラミングコンテスト2023 (AtCoder Beginner Contest 299) G - Minimum Permutation (600)
答えの部分列を配列で管理
前から各文字について以下のように行う
既に配列内にある文字なら飛ばす
これはフラグで管理
配列の最後の文字列が今の文字より辞書順で後でかつまだ後ろで登場する文字の場合
その文字を配列から取り出して未使用状態にする
後ろで登場するかどうかは各文字の登場回数を事前にカウントしておく
今の文字を配列に追加し、使用済み状態にする
こうするとできるだけ辞書順に小さい文字列が優先して配列に入るようになる