# Other Solutions were Just STL Implementation

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

}

#2

Really well explained, great job man!

#3

Well explained! Thank you!