def check(n, s): #检查是否是回文数
temp = set()
if n%2 == 0:
for i in range(26):
if s.count(chr(ord('a')+i)) % 2 != 0: #出现不可匹配,不是回文数
print("Impossible")
return False
else:
return True
else:
for i in range(26):
if s.count(chr(ord('a') + i)) % 2 != 0: #不可匹配添加到集合里
temp.add(chr(ord('a') + i))
if len(temp) > 1: #如果多个不可匹配,不是回文数
print("Impossible")
return False
else:
return True
def step(n, s, res):
for i in range(n//2): #减少无效循环
if s[i:].count(s[i]) != 1: #成对
temp = s[::-1].index(s[i]) #倒叙下标就是移动步数
s.pop(len(s) - temp - 1) #弹出该匹配成功
res += temp #添加到总部数
else:
res += n//2 - i
return res
n = int(input())
s = list(input())
res = 0
if check(n, s):
print(step(n, s, res))
蓝桥杯—基础训练 python完美的代价
最新推荐文章于 2024-07-27 12:20:46 发布