題目要求:
問題要求
回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍
龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算
最少的交換次數使得該串變成乙個完美的回文串。
交換的定義是:交換兩個相鄰的字元
例如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...