最多交换一次数字、使数尽量大

int maximumSwap(int num) {
    // 从左往右看各位置,看有没有比当前数字尽量大的数字在最后面,有就交换
    string s = to_string(num);
    const int N = s.size();
    vector<int> lastIdx(10, -1);
    for (int i = 0; i < N; i++) {
        lastIdx[s[i] - '0'] = i;
    }
    
    for (int i = 0; i < N; i++) {
        for (int x = 9; x > s[i] - '0'; x--) {
            if (lastIdx[x] > i) {
                swap(s[i], s[lastIdx[x]]);
                return stoi(s);
            }
        }
    }
    return num;        
}