给定字符串,输出可以由其组成的最长的、字典序最小的回文字符串
如,aaaccddef,输出结果为acdadca
from collections import Counter
string = input().strip()
cnt = dict(Counter(string))
evens = [] # 可以做回文字符串两边对称部分的字符以及其个数(一半)组成的列表
single = [] # 奇数个数的字符列表,可以做回文字符串中间的字符列表
for ch in cnt:
if cnt[ch] == 1:
single.append(ch)
else:
evens.append((ch, cnt[ch] // 2))
if cnt[ch] % 2 != 0:
single.append(ch)
evens.sort(key=lambda x: x[0])
single.sort()
pre_part = ''
for even, count in evens:
pre_part += even * count
if single:
pre_part += single[0] + pre_part[::-1]
else:
pre_part += pre_part[::-1]
print(pre_part)