贪心的思想,要找到最大的数,如果是按照从大到小排序,那么当前就是最大数字,如果不是,那么很容易想到,尽量把最大的数字放最前面。
解题步骤:
1、把数字转成列表方便操作。
2、从当前遍历位置往右扫描每一位,找有没有更大的数字可以交换。
3、如果找到了比当前位大的数字,就交换它们。(注意如果有多个最大值,我们选取最后一位最大值,让数值最大化)
如何找最后一个匹配元素的下标?
s[::-1] 把列表倒过来。
index(mx) 是元素mx在倒序里的位置。
再用len(s)-s[::-1].index(mx)-1 转换回原列表的下标。
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param num string字符串
# @return string字符串
#
class Solution:
    def maximumSwap(self, num: str) -> str:
        # write code here
        s, i, n = list(num), 0, len(num)
        while i<n-1:
            mx = max(s[i+1:])
            if s[i]<mx:
                j = n-s[::-1].index(mx)-1
                s[i], s[j] = s[j], s[i]
                break
            i += 1
        return ''.join(s)