题意:判断一个串能否通过临近的两个字符多次交换变成回文串,不能输出“Impossible”,能的话输出最少的交换次数。
思路:预处理每个字母出现的次数,若有>=2个字母出现的次数是奇数则不可能。然后从两边向中间贪心,每次先固定前端,然后从后端向中间逐步找,直到找到第一个与前端相同字母时break,将找到的字母向后移,加上移动的次数(不知道为什么可以这么做,网上说这样做 和 每次找最优 最后结果是一样的,暂时还没有证明出来)。若碰到个数为奇数的字母时,将它往后顺移,最后它就会在中央位置了。...
分类:
其他好文 时间:
2015-03-31 14:50:46
阅读次数:
118
题意:
输入一个字符串,我们可以交换这个字符串中的相邻字符;问至少经过多少步交换可以得到一个回文串;如果无论怎么交换都得不到回文串,输出“Impossible”;
思路:
首先由回文串的定义和性质,可以得到两种不可能情况:1.当这个串长度为奇数时,如果出现次数为奇数次字母的数目不为1,则显然不可能。2.当这个串长度为偶数时,如果出现次数为奇数次字母的个数大于0,则不可能。
...
分类:
其他好文 时间:
2014-11-26 21:03:56
阅读次数:
143