基礎練習 完美的代價
問題描述
迴文串,是一種特殊的字符串,它從左往右讀和從右往左讀是一樣的。小龍龍認爲回
文串纔是完美的。現在給你一個串,它不一定是迴文的,請你計算最少的交換次數使得該
串變成一個完美的迴文串。
交換的定義是:交換兩個相鄰的字符
例如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")