基礎練習19- 完美的代價(python答案)

基礎練習 完美的代價

問題描述
  迴文串,是一種特殊的字符串,它從左往右讀和從右往左讀是一樣的。小龍龍認爲回

文串纔是完美的。現在給你一個串,它不一定是迴文的,請你計算最少的交換次數使得該

串變成一個完美的迴文串。
  交換的定義是:交換兩個相鄰的字符
  例如mamad
  第一次交換 ad : mamda
  第二次交換 md : madma
  第三次交換 ma : madam (迴文!完美!)
輸入格式
  第一行是一個整數N,表示接下來的字符串的長度(N <= 8000)
  第二行是一個字符串,長度爲N.只包含小寫字母
輸出格式
  如果可能,輸出最少的交換次數。
  否則輸出Impossible
樣例輸入
5
mamad
樣例輸出
3

def ishuiwen(a,n):#判斷是否能構成迴文
    b = [' ' for i in range(26)]
    for i in range(26):
        b[i]=(chr(97+i))
        k=0
    for i in range(26):
        t=0
        for j in range(n):
            if b[i]==a[j]:
                t+=1
        if t%2!=0:
            k+=1
    if k>1:
        return 0
    else:
        return 1
def change(a,n):
    s=0
    for i in range(n):
        k=0
        while a[i]!=a[n-k-i-1]:
            k+=1
        if k>0 and i!=n-k-1:
            t=a[n-k-i-1]
            a[n-k-i-1]=a[n-i-1]
            a[n-i-1]=t
            s+=1
        elif k>0 and i==n-k-1:#出現單個字母的情況
            t=a[int(n/2)]
            a[int(n/2)]=a[i]
            a[i]=t
            s,i=s+1,i-1
    for i in range(n):
        print(a[i],end='')
    print('\n')
    return s

n = int(input())
a = input()
if ishuiwen(a,n):
    b = []
    for k in a:#python不能更改字符串中的某個元素,只能序列化爲列表再更改
        b.append(k)
    print(change(b,n))
else:
    print("Impossible")

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章