[伯俊]1213号-パリンドロンを作る


アイデア


ファリン・ドロン
文字列
1)入力した文字列(アルファベット、文字列にアルファベットが含まれている回数)を組み合わせてセットを作成します.
->このとき,回数を偶数と奇数に分けて分類する.
2)奇数回数のアルファベットが1文字以上であればパリンドロンにはならないのでI'm Sorry Hansooを出力する.
3)奇数のアルファベットが存在し、値が1を超える場合は(回数-1)と仮定して偶数のアルファベットセットに追加します.
ex)(「A」,3)の場合、1番は一番中央に出力すべきなので、2番は両側に出力すればよいのですが、このようなプロセスは偶数セットをアルファベット順に並べて処理すればよいので(「A」,2)偶数セットに追加します.
4)偶数回数セットを辞書順に並べ替えます.
5)辞書順に並べられた偶数回数セットのアルファベットを回数の半分として記憶する.
6)ファリンドロンは対称でなければならないため,これまでプロセスによって生成された文字列は逆方向に格納されていた.
7)奇数セットが存在する場合は、奇数が発生したアルファベットを一度文字列に貼り付けます.
8)ドメインに格納されている文字列をドメインに貼り付けます.

コード#コード#

name = list(input())
count_even = list(set([(n,name.count(n)) for n in name if name.count(n) % 2 == 0 ]))
count_odd = list(set([(n,name.count(n)) for n in name if name.count(n) % 2 != 0 ]))

if len(count_odd) > 1:
    print("I'm Sorry Hansoo")
    exit()

str = ""
if count_odd:
    if count_odd[0][1] > 1:
        count_even.append((count_odd[0][0],count_odd[0][1]-1))

count_even.sort(key = lambda x : x[0])

for alpha in count_even:
    str += alpha[0] * (int(alpha[1]/2))

tmp_str = "".join(reversed(str))
if count_odd:
    str += count_odd[0][0]
str += tmp_str

print(str)