#include <any>
#include <unordered_map>
class Solution {
public:
    //位优先,在一位上后面有比它大的数就交换,但是这个有相同的数也是最后面的数给它交换;
    string maximumSwap(string num) {
	  //记录每个数字最后出现的位置;
        unordered_map<int, int> mp;//键是数字,值是最后出现的位置
        
        int i=0;
        for(char c:num){
            int e = c - '0';
            mp[e] = i;	//存放下标
            ++i;
        }

        for(i=0; i<num.size(); ++i){
            int e = num[i] - '0';
            for(int j=9; j>e; --j){
                if(mp[j] > i){
                    swap(num[i], num[mp[j]]);
                    return num;
                }
            }
        }

        return num;
    }
};