試題 基礎練習 完美的代價

2021-10-18 16:26:51 字數 820 閱讀 3970

回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。

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

例如mamad

第一次交換 ad : mamda

第二次交換 md : madma

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

第一行是乙個整數n,表示接下來的字串的長度(n <= 8000)。第二行是乙個字串,長度為n.只包含小寫字母

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

樣例輸入

5mamad

樣例輸出

3

#include

using

namespace std;

#include

intmain()

else

if(flag==

1)flag=2;

//出現兩次落單字元

}else

if(s[i]

==s[j]

) s[n-1]

=s[i]

; n--

;break;}

}if(flag==2)

break;}

if(flag==

2)cout<<

"impossible"

;else

if(flag==

0)cout

if(flag==

1)cout

}

基礎練習 完美的代價

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

基礎練習 完美的代價

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

基礎練習 完美的代價

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