问题描述
回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。
交换的定义是:交换两个相邻的字符
例如mamad
第一次交换 ad : mamda
第二次交换 md : madma
第三次交换 ma : madam (回文!完美!)
输入格式
第一行是一个整数N,表示接下来的字符串的长度(N <= 8000)
第二行是一个字符串,长度为N.只包含小写字母
输出格式
如果可能,输出最少的交换次数。
否则输出Impossible
样例输入
5
mamad
样例输出
3
n=int(input())
l1=input()
length = len(l1)
l1=list(l1)
count=0 #对不成对出现元素的计数
times=0
time=0
while l1:
length = len(l1)
for i in range(-1,-length,-1):
if l1[0]==l1[i]:
l1.pop(i)
l1.pop(0)
times +=time
time=0
break
else:
time +=1
if time !=0 or length==1:
count +=1
l1.pop(0)
time=0
times += int(length/2)
if count >1:
break
if count>1:
print("Impossible")
else:
print(times)
这是一个关于如何计算将非回文串转化为回文串所需的最少相邻字符交换次数的问题。给定一个字符串,程序通过遍历并交换成对的字符来尝试形成回文串,计算过程中记录交换次数。当无法形成回文串时,输出Impossible。

被折叠的 条评论
为什么被折叠?



