Python練習題 完美的代價 選自藍橋杯

2021-10-03 10:16:19 字數 1998 閱讀 3184

題目要求:

問題要求

回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍

龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算

最少的交換次數使得該串變成乙個完美的回文串。

交換的定義是:交換兩個相鄰的字元

例如mamad

第一次交換 ad : mamda

第二次交換 md : madma

第三次交換 ma : madam (回文!完美!)

輸入格式

第一行是乙個整數n,表示接下來的字串的長度(n <= 8000)

第二行是乙個字串,長度為n.只包含小寫字母

輸出格式

如果可能,輸出最少的交換次數。

否則輸出impossible

樣例輸入

5mamad

樣例輸出

3**圖:

**如下:

class

perfect

(object):

#定義乙個類

defmain

(self)

:#定義主函式

n=int(

input()

) str1=

input()

.strip(

)if self.judge(n,str1)

:#通過判斷函式是否可以變成乙個完美回文串

result=self.operation(n,str1)

print

(result)

else

:#如果不能,輸出impossible

print

('impossible'

)def

judge

(self,n,str)

:#判斷函式,判斷是否可變成完美回文串

str_p=

'abcdefghijklmnopqrstuvwxyz'

if n%2==

0:for s in str_p:

if str.count(s)%2

==1:return

false

return

true

else

: num=

0for s in str_p:

if str.count(s)%2

==1: num=num+

1if num==2:

return

false

return

true

defoperation

(self,n,str)

:#如果可變,返回需要多少步.

count=

0 lst=

list

(str)

for i in

range

(n//2)

:if lst.count(lst[0]

)!=1:

step=lst[::

-1].index(lst[0]

) lst.pop(0)

lst.pop(

-(step+1)

) count=count+step

else

: step=

len(lst)//2

lst.pop(0)

count=count+step

return count

perfect=perfect(

)perfect.main(

)

執行結果圖:

基礎練習 完美的代價

問題描述 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字元 例如mamad 第一次交換 ad mamda 第二次交換 md madma 第三次...

基礎練習 完美的代價

問題描述 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字元 例如mamad 第一次交換 ad mamda 第二次交換 md madma 第三次...

基礎練習 完美的代價

回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字元 例如mamad 第一次交換 ad mamda 第二次交換 md madma 第三次交換 ma...