我想要一个有效的算法来找到给定字符串的下一个更大的排列。
维基百科上有一篇关于词典顺序生成的不错的文章。它还描述了生成下一个排列的算法。
报价:
在给定排列之后,以下算法按字典顺序生成下一个排列。它就地更改给定的排列。
找到最高指数i,使得s[i] < s[i+1]。如果不存在这样的索引,则该排列为最后的排列。 找到最高指数j > i,使得s[j] > s[i]。这样一个j必须存在,因为i+1是这样的指标。 s[i]与交换s[j]。 反转索引之后i直到最后一个元素的所有元素的顺序。
i
s[i] < s[i+1]
j > i
s[j] > s[i]
j
i+1
s[i]
s[j]