回⽂串,是⼀種特殊的字串,它從左往右讀和從右往左讀是⼀樣的。⼩⻰認為回⽂串才是完美的。現在給你⼀個串,它不⼀定是回⽂的,請你計算最少的交換次數使得該串變成⼀個完美的回⽂串。
交換的定義是:交換兩個相鄰的字元
例如 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,這樣整個字串完美度...