Equalizing Two Strings - #598 div2 f

#文字列 #転倒数

解法

すべての文字に関して, 個数がs, tで同じでないといけない


反転する長さを2とする
1文字でも2つ以上出てたら必ずs, tを同じにできる
s, tをsortするが, 隣の文字のswap回数を同じにしないといけない
同じ文字があれば, そこでswapしてswap回数合わせられる


すべての文字が1つ以下なら,
swap回数の偶奇を合わせられるかが問題
swap回数は転倒数で求める

隣のswapでsortするのに必要な最小回数
= 前から見て, 自分より前で自分より大きいものの個数の総和  \ \ \ \ (1)

abdcなら, cにとってdの1個

eabfdcg
まず, 自分より前の自分より大きいものとswapし
続けるのが最適  \ \ \ \ (2)
1回のswapで, 隣の2数の大小関係しか変わらない
すなわち, (1)は1しか減らせない
隣の2数で, 前が後ろより大きい箇所がなければそれはsortし終わった
数列なので, (2)は常に可能


実は, 転倒数を使わなくていい
なぜなら, 同じ文字は現れないので, 最大26文字だから