先上题目:
题目描述
所谓回文串,就是对于给定的字符串,正着读和反着读都一样,比如ABCBA就是一个回文串,ABCAB则不是。我们的目标是对于任意输入的字符串,不断将第i个字符和第i+1个字符交换,使得该串最终变为回文串。求最少交换次数。
输入格式
一个由大写字母字母组成的字符串。
输出格式
若能经过有限次操作能将原串变为回文串,则输出最少操作次数;否则输出-1
。
输入输出样例
输入 #1复制
SHLLZSHZS
输出 #1复制
4
说明/提示
样例说明
- 交换 L 和 Z 变成 SHLZLSHZS
- 交换 L 和 Z 变成 SHZLLSHZS
- 交换 L 和 S 变成 SHZLSLHZS
- 交换 H 和 Z 变成 SHZLSLZHS
数据范围
40% 的数据, 长度\≤50000
100% 的数据, 长度10^6
题解:
思路:
贪心+逆序对
我们先判断无解的情况,我们把串中每个字母出现的次数统计一下,个数为奇数的最多只能有一个,因为两两成对,当为1个奇数个数时,序列长度为奇数,最中间的那个位置正好可以填上这个