C++ Code with all the comments required to understand


#1

string Solution::solve(string a) {

int n = a.length();

string hex = a;  // just to store the a temporarily so 
                //that at last we can see if the string a has actually gone a change.
string z="-1"; // just to return the -1 I am storing it in a string(good practise).

if(n<2)  // just to care for single element or empty element in given string coz both 
return z; //of 'em won't be undergoing any change. 

int i1; // we are just using this to store the index of first non increasing number
           // as seen from bacck side. eg for 124321 i1 = index value of 2 i.e 1.

bool found = false; // just to make sure that we get i1 otherwise return -1.

for(int i = n-1;i>0;i--){
    if(a[i-1]-'0'<a[i]-'0'){ // this part is to obtain i1
        i1 = i-1;
        found = true;
     break;   
    }
}

if(!found) // if i1 is not found return -1 as discussed above.
return z;

for(int i = n-1;i>i1;i--){
    if(a[i]-'0'>a[i1]-'0'){
        swap(a[i],a[i1]);  //in this part we'll swap the a[i1] with first bigger 
        break;             //value from the right. a now is 134221
    }    
}

sort(a.begin()+i1+1,a.end()); //just to sort the other values after index i1,
                                //a now will be 131224 which is the ans

if(a==hex)// just to check if a has undergone change
return z;
else
return a;

}