#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; } };