Let's say you have the string cana
. The string with the lexicographical order higher than that, would be cnaa
. Is there any way you could do that, faster than just checking from right to left for every character?
Asked
Active
Viewed 32 times
-1

smunteanu
- 422
- 3
- 9
-
1Please show your solution - you may have already found the best one. – 500 - Internal Server Error Mar 12 '21 at 18:22
-
2Does this answer your question? [Algorithm to find next greater permutation of a given string](https://stackoverflow.com/questions/1622532/algorithm-to-find-next-greater-permutation-of-a-given-string) – jodag Mar 12 '21 at 18:46
1 Answers
0
#include <string>
#include <algorithm>
void swap_chars(char &a, char &b) {
char m = a;
a = b;
b = m;
}
std::string next(std::string str) {
for (int i=str.length()-1; i>0; i--)
if (str.at(i-1) < str.at(i)) {
swap_chars(str.at(i-1), str.at(i));
std::sort(str.begin()+i, str.end());
break;
}
return str;
}

smunteanu
- 422
- 3
- 9
-
2If you're going to use `algorithm` you can just just use [`std::next_permutation(str.begin(), str.end())`](https://en.cppreference.com/w/cpp/algorithm/next_permutation). – jodag Mar 12 '21 at 19:17
-