题解 | 最大数字交换

最大数字交换

https://www.nowcoder.com/practice/ffcd59fbf5814d2e94c0e2f4a679473c

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

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务