Palindrome Reorder

不是單純判斷回文,還要輸出一組回文

主要想法有下:

  • 按照字典序來決定誰先出來
  • 將輸出看作“前 + 中 + 後”
    而“後”就是“前”的[::-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)

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *