C - Swap to Palindrome

2 secs 1024 MB
matcharate12's icon matcharate12

この問題は場合分けを問います。

SS が回文となる条件は、以下のいずれかを満たすときです。

  • NN が偶数のとき: 各文字の個数が偶数個
  • NN が奇数のとき: 11 文字だけ除く各文字が偶数個、除いた 11 文字が奇数個

またこれ以外の文字列では回文になり得ません。これは回文の定義から示すことができます。

以上から各文字の個数を数える配列を作ることによって、O(N)O(N) でこの問題を解くことができます。以下は解答例(C++,Python)です。

解答例ではASCIIコードに変換してその添え字を用いて配列に格納しています。ASCIIコードに関してはここでは省略します。