贪心。
1.由于需要让字典序变大。所以如果存在si<si+1 ,那么就优先翻转。如果有多个,就优先反转i尽量小的。
2.如果不存在,那么就找si==si+1 的,这样至少不会让字典序变小。
3.如果相等都不存在,那么不管怎么交换,字典序必定减小。所以反转i尽量大的位置.使得字典序降的尽量少。
python代码
s = list (input())
n = len(s)
p = -1
for i in range (n - 1):
if s[i] < s[i + 1]:
p = i
break
if p == -1:
for i in range (n - 1):
if s[i] == s[i + 1]:
p = i
break
if p == -1:
for i in range (n - 1):
if s[i] > s[i + 1]:
p = i
s[p] , s[p + 1] = s[p + 1] , s[p]
print ("".join(s))
米小游是一个热爱破解密码的年轻人,他喜欢挑战各种难度的密码。有一天,他收到了一封神秘的邮件,邮件中只有一个由小写字母组成的字符串。他猜测这个字符串可能是某个密码的一部分,于是开始尝试将其解密。
他通过分析字符串的特征,发现这个字符串的字母顺序可能不太对,于是他决定进行一次交换相邻字母的操作,以使得字符串的字典序尽可能大。
请你输出最终生成的字符串。
一个仅由小写字母组成的字符串,长度不小于 2 ,不超过 200000 。
操作后的字符串。
输入
ba
输出
ab