基礎練習 完美的代價

2021-06-29 01:55:42 字數 958 閱讀 8785

問題描述

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

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

例如mamad

第一次交換 ad : mamda

第二次交換 md : madma

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

輸入格式

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

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

輸出格式

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

否則輸出impossible

樣例輸入

5mamad

樣例輸出

3思路:

貪心法,從左邊起依次掃瞄,每記錄乙個字母,就尋找從右邊起最近的與它相同的字母,移動到回文的位置,記錄步數,如果最近的與它相同的字母是它本身,說明它在字串裡單獨存在,可以根據單獨存在的字母的個數以及字串的長度來判斷impossible的情況,如果排除impossible的情況,則記錄它到字串中間的步數,並不需要移動它。

//#define local

#include #include int main()

p = n/2 - i;

break;

}else if(str[k] == str[i])

str[j] = str[i];

j--;

break;

} } }

printf("%d\n", ans + p);

return 0;

}

基礎練習 完美的代價

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

基礎練習 完美的代價

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

基礎練習 完美的代價

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