本文參考:
問題描述
基礎練習 完美的代價
時間限制:1.0s 記憶體限制:512.0mb
問題描述
回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。
交換的定義是:交換兩個相鄰的字元
例如mamad
第一次交換 ad : mamda
第二次交換 md : madma
第三次交換 ma : madam (回文!完美!)
輸入格式
第一行是乙個整數n,表示接下來的字串的長度(n <= 8000)
第二行是乙個字串,長度為n.只包含小寫字母
輸出格式
如果可能,輸出最少的交換次數。
否則輸出impossible
樣例輸入
5mamad
樣例輸出
3思路分析:
1.先判斷輸入的字串能否構成回文
2.若不能構成回文,則輸出;若能構成回文,則計算最少的交換次數。
具體過程
0123
456a
bbch
ca 0
1234
56ab
bchc
aabc
bhca
abch
bcaa
bchc
ba01
2345
6hba
bcca
0123456
hbab
ccah
bacb
cahb
accb
ahba
ccab
**實現
#include#includeusing namespace std;
void input();//輸入
bool judje_huiwen(char a);//判斷是否為回文
void judje();//判斷能否構成回文
void move();//計算移動的次數
int num[26]=;//總計字母出現的次數
char a[8000];//輸入字串的長度
int n;//輸入的長度
int main()
void input()
} bool judje_huiwen(char a)
if(strcmp(a,b)==0)
else
}void judje()
a[len-1]=a[i];
len--;//找到匹配一次,就從右往左移動一次
break;}}
if(i==j)
} }cout<}
藍橋杯 完美的代價
藍橋杯 完美的代價 問題描述 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字元 例如mamad 第一次交換 ad mamda 第二次交換 md...
藍橋杯 完美的代價
回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字元 例如mamad 第一次交換 ad mamda 第二次交換 md madma 第三次交換 ma...
藍橋杯 完美的代價
回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字元 例如mamad 第一次交換 ad mamda 第二次交換 md madma 第三次交換 ma...