字串 A015 LQ 完美的代價(貪心細節)

2021-10-03 22:33:47 字數 1004 閱讀 9516

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

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

例如 mamad

第⼀次交換 ad : mamda

第⼆次交換 md : madma

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

輸⼊格式

第⼀⾏是⼀個整數n,表示接下來的字串的⻓度(n <= 8000)

第⼆⾏是⼀個字串,⻓度為n.只包含⼩寫字⺟

輸出格式

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

否則輸出impossible

樣例輸⼊

5mamad

樣例輸出

3

思路

查詢是否存在不同位置的相同字母。

* 核心邏輯:從外往裡地將與當前位置 cur 相同的字元移動到 n-cur-1 位置(即映象位置),這樣可保證移動的次數最小。

public

class

main

if(cnt >=2)

//主幹

for(

int l =

0; l < n/

2; l++

)return;}

//交換

private

static

void swap (

int l,

int r)

//找到與當前字元相同的最後的出現位置

private

intfind

(int cur)

swap

(cur, cur+1)

;//如果找不到

return

find

(cur);}

}

字串完美度

題目描述 們要給每個字母配乙個1 26之間的整數,具體怎麼分配由你決定,但不同字母的完美度不同,而乙個字串的完美度等於它裡面所有字母的完美度之和,且不在乎字母大小寫,也就是說字母f和f的完美度是一樣的。現在給定乙個字串,輸出它的最大可能的完美度。例如 dad,你可以將26分配給d,25分配給a,這樣...

完美字串

約翰認為字串的完美度等於它裡面所有字母的完美度之和。每個字母的完美度可以由你來分配,不同字母的完美度不同,分別對應乙個1 26之間的整數。約翰不在乎字母大小寫。也就是說字母f和f 的完美度相同。給定乙個字串,輸出它的最大可能的完美度。例如 dad,你可以將26分配給d,25分配給a,這樣整個字串完美...

完美字串

約翰認為字串的完美度等於它裡面所有字母的完美度之和。每個字母的完美度可以由你來分配,不同字母的完美度不同,分別對應乙個1 26之間的整數。約翰不在乎字母大小寫 也就是說字母a和a的完美度相同 給定乙個字串,輸出它的最大可能的完美度。例如 dad,你可以將26分配給d,25分配給a,這樣整個字串完美度...