蓝桥杯【python组】——完美的代价(回文字符串)

编程入门 行业动态 更新时间:2024-10-11 23:24:53

蓝桥杯【python组】——完美的代价(<a href=https://www.elefans.com/category/jswz/34/1769494.html style=回文字符串)"/>

蓝桥杯【python组】——完美的代价(回文字符串)

1.题目
试题 基础练习 完美的代价

资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
  回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。
  交换的定义是:交换两个相邻的字符
  例如mamad
  第一次交换 ad : mamda
  第二次交换 md : madma
  第三次交换 ma : madam (回文!完美!)
输入格式
  第一行是一个整数N,表示接下来的字符串的长度(N <= 8000)
  第二行是一个字符串,长度为N.只包含小写字母
输出格式
  如果可能,输出最少的交换次数。
  否则输出Impossible
样例输入
5
mamad
样例输出
3
2.思路
满足impossible的条件为:字符串个数为偶数且遍历到了有一个奇数个的字符或者在有一个奇数个的字符上又遍历到了另一个奇数个的字符

3.代码

n = int(input())
s = list(input())
count = flat = 0                        ##count用来计数,flat表示已经有一个单独的奇数个的字符
m = n - 1
for i in range(m):for k in range(m,i-1,-1):if k==i:                        ##出现不相同的字符if flat==1 or n%2==0:       ##满足impossible的条件print("impossible")exit()flat = 1count += int(n/2) - ielif s[i] == s[k]:              ##出现相同的字符for j in range(k,m):s[j],s[j+1] = s[j+1],s[j]count+=1                ##计数器加一m -= 1                      ##排好序的不再进行比较break
print(count)

更多推荐

蓝桥杯【python组】——完美的代价(回文字符串)

本文发布于:2024-03-07 18:45:05,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1718618.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:回文   字符串   代价   完美   蓝桥杯

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!