藍橋杯 完美的代價 小白也能理解

2021-10-02 04:40:03 字數 1014 閱讀 1749

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

小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。

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

例如: mamad

第一次交換 ad : mamda;

第二次交換 md : madma;

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

input

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

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

output

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

否則輸出impossible。

!!!假如字母是這樣的daamm,基準字母是d,這時從後搜尋不到d,我們的程式返回impossible,這時程式是有問題的,我們需要將基準字母和下乙個字母交換一次,然後重新開始搜尋方可解決問題。

#include

#include

using

namespace std;

void

swap

(char

&a,char

&b)int

main()

;// 開始遍歷基準字母

for(

int i=

0;i2;i++

) flag =0;

break;}

}// 如果沒有找到

if(flag)

} cout <<

"impossible"

<< endl;

return0;

}}}// 全部基準字母都有,返回交換次數

cout << ans << endl;

return0;

}

藍橋杯 完美的代價

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

藍橋杯 完美的代價

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

藍橋杯 完美的代價

本文參考 問題描述 基礎練習 完美的代價 時間限制 1.0s 記憶體限制 512.0mb 問題描述 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰...