
要使交换次数最多并且最短,肯定是逆序。
先写一个冒泡排序,并在排序过程中统计交换次数,然后尝试几个逆序的字母排列(不断在前面加下一个字母),很容易试出来刚好超过100次的字符串(onmlkjihgfedcba),为105次。
然后对字符串进行处理,减少5次交换,即将某一个字母向前移动5位,因为题目要求字典序最小,所以肯定是将第六个字母(j)放在首位(使o不位于首位)。
def s(lis: list):
cnt = 0
for i in range(len(lis)):
for j in range(0, len(lis)-i-1):
if lis[j] > lis[j+1] :
lis[j], lis[j+1] = lis[j+1], lis[j]
cnt += 1
print(cnt)
s(list("nmlkjihgfedcba")) # 91
s(list("onmlkjihgfedcba")) # 105
s(list("jonmlkihgfedcba")) # 100
版权声明:本文为milk_paramecium原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。