不是單純判斷回文,還要輸出一組回文
主要想法有下:
- 按照字典序來決定誰先出來
- 將輸出看作“前 + 中 + 後”
而“後”就是“前”的[::-1] - 如果超過一個字母次數為奇數,則回文不成立
解
from collections import Counter # 統計每個元素出現的次數
s = input()
d = Counter(s) # 字典
odd_cnt = 0 # 計算出現奇數次的字母數量
odd_cr = '' # 記錄奇數次的字母是誰
first_half = '' # 回文的前半段
# 處理前半段
for i in d:
if d[i] % 2 == 1:
odd_cnt += 1
odd_cr = i
else:
first_half += i * (d[i] // 2)
# 若超過一個字母出現奇數次,無法構造回文
if odd_cnt > 1:
print("NO SOLUTION")
else:
second_half = first_half[::-1] # 回文後半段是前半段的反轉
middle = odd_cr * d[odd_cr] if odd_cr else ''
print(first_half + middle + second_half)
Leave a Reply